x-developer 2.4.16 → 2.5.1
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/.claude-plugin/marketplace.json +60 -0
- package/.claude-plugin/plugin.json +45 -0
- package/.codex-plugin/plugin.json +17 -4
- package/.mcp.json +11 -0
- package/README.md +146 -92
- package/assets/icon.svg +1 -0
- package/commands/post.md +15 -0
- package/commands/search.md +16 -0
- package/commands/trending.md +17 -0
- package/commands/user.md +19 -0
- package/context7.json +33 -0
- package/logo.png +0 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +29 -6
- package/scripts/check-versions.mjs +381 -0
- package/scripts/release-guard/content-policy.mjs +337 -0
- package/scripts/release-guard/frontmatter.mjs +148 -0
- package/scripts/release-guard/policy.mjs +227 -0
- package/server.json +33 -0
- package/skills/x-twitter-scraper/SKILL.md +180 -31
- package/skills/x-twitter-scraper/metadata.json +29 -3
- package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +31 -0
- package/skills/x-twitter-scraper/references/api-endpoints-compose.md +33 -0
- package/skills/x-twitter-scraper/references/api-endpoints-credits.md +11 -0
- package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +86 -0
- package/skills/x-twitter-scraper/references/api-endpoints-draws.md +75 -0
- package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +37 -0
- package/skills/x-twitter-scraper/references/api-endpoints-events.md +48 -0
- package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +97 -0
- package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +74 -0
- package/skills/x-twitter-scraper/references/api-endpoints-radar.md +49 -0
- package/skills/x-twitter-scraper/references/api-endpoints-support.md +47 -0
- package/skills/x-twitter-scraper/references/api-endpoints-trends.md +25 -0
- package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +155 -0
- package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +74 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +42 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +206 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +40 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +204 -0
- package/skills/x-twitter-scraper/references/api-endpoints.md +26 -1375
- package/skills/x-twitter-scraper/references/draws.md +2 -2
- package/skills/x-twitter-scraper/references/extractions.md +9 -1
- package/skills/x-twitter-scraper/references/mcp-setup.md +38 -22
- package/skills/x-twitter-scraper/references/mcp-tools.md +35 -26
- package/skills/x-twitter-scraper/references/python-examples.md +19 -4
- package/skills/x-twitter-scraper/references/security.md +31 -7
- package/skills/x-twitter-scraper/references/types-account-identity.md +9 -0
- package/skills/x-twitter-scraper/references/types-account.md +26 -0
- package/skills/x-twitter-scraper/references/types-api-keys.md +22 -0
- package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +46 -0
- package/skills/x-twitter-scraper/references/types-credits.md +11 -0
- package/skills/x-twitter-scraper/references/types-download-media.md +22 -0
- package/skills/x-twitter-scraper/references/types-draws.md +60 -0
- package/skills/x-twitter-scraper/references/types-error.md +10 -0
- package/skills/x-twitter-scraper/references/types-events.md +43 -0
- package/skills/x-twitter-scraper/references/types-extractions.md +106 -0
- package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +14 -0
- package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +10 -0
- package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +31 -0
- package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +15 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-account.md +26 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +30 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-events.md +19 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +15 -0
- package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +25 -0
- package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +22 -0
- package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +13 -0
- package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +18 -0
- package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +12 -0
- package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +17 -0
- package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +11 -0
- package/skills/x-twitter-scraper/references/types-monitors.md +20 -0
- package/skills/x-twitter-scraper/references/types-radar.md +40 -0
- package/skills/x-twitter-scraper/references/types-request-bodies.md +30 -0
- package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +15 -0
- package/skills/x-twitter-scraper/references/types-support.md +25 -0
- package/skills/x-twitter-scraper/references/types-trends.md +18 -0
- package/skills/x-twitter-scraper/references/types-tweet-drafts.md +20 -0
- package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +50 -0
- package/skills/x-twitter-scraper/references/types-user-activity.md +35 -0
- package/skills/x-twitter-scraper/references/types-webhooks.md +38 -0
- package/skills/x-twitter-scraper/references/types-x-accounts.md +16 -0
- package/skills/x-twitter-scraper/references/types-x-api.md +69 -0
- package/skills/x-twitter-scraper/references/types-x-articles.md +21 -0
- package/skills/x-twitter-scraper/references/types-x-write.md +39 -0
- package/skills/x-twitter-scraper/references/types.md +46 -1005
- package/skills/x-twitter-scraper/references/usage.md +50 -0
- package/skills/x-twitter-scraper/references/webhooks.md +19 -10
- package/skills/x-twitter-scraper/references/workflows.md +50 -39
- package/skills/x-twitter-scraper/skill-card.md +76 -0
- package/skills/x-twitter-scraper/skillspector-report.md +17 -0
- package/skills/xquik-social-research/LICENSE +21 -0
- package/skills/xquik-social-research/SKILL.md +77 -0
- package/skills.sh.json +77 -0
- package/start.sh +2 -0
- package/stub-server.mjs +209 -0
- package/task-guides/check-mutuals.md +55 -0
- package/task-guides/clean-followers.md +71 -0
- package/task-guides/export-tweets-csv.md +70 -0
- package/task-guides/extract-followers.md +83 -0
- package/task-guides/find-bangers.md +61 -0
- package/task-guides/find-influencers.md +72 -0
- package/task-guides/find-viral-tweets.md +80 -0
- package/task-guides/follow-unfollow.md +83 -0
- package/task-guides/for-you-feed.md +63 -0
- package/task-guides/going-viral.md +68 -0
- package/task-guides/grow-followers.md +66 -0
- package/task-guides/monitor-accounts.md +81 -0
- package/task-guides/optimize-tweets.md +80 -0
- package/task-guides/post-tweets.md +108 -0
- package/task-guides/run-giveaway.md +90 -0
- package/task-guides/search-tweets.md +122 -0
- package/task-guides/send-dms.md +92 -0
- package/task-guides/top-replies.md +71 -0
- package/task-guides/track-competitors.md +73 -0
- package/task-guides/track-hashtags.md +86 -0
- package/task-guides/track-mentions.md +88 -0
- package/task-guides/trending-news.md +68 -0
- package/task-guides/tweet-analytics.md +129 -0
- package/task-guides/tweet-ideas.md +65 -0
- package/task-guides/tweet-replies.md +82 -0
- package/task-guides/tweet-style.md +72 -0
- package/task-guides/tweet-webhooks.md +84 -0
- package/task-guides/update-x-profile.md +75 -0
- package/task-guides/user-tweets.md +148 -0
- package/task-guides/who-liked.md +68 -0
- package/task-guides/who-quoted.md +68 -0
- package/task-guides/who-retweeted.md +67 -0
- package/task-guides/write-threads.md +72 -0
- package/task-guides/write-tweets.md +84 -0
- package/task-guides/x-articles.md +84 -0
- package/task-guides/x-bookmarks.md +63 -0
- package/task-guides/x-communities.md +71 -0
- package/task-guides/x-lists.md +70 -0
- package/task-guides/x-spaces.md +67 -0
- package/task-guides/x-trends.md +74 -0
- package/skills/x-twitter-scraper/references/pricing.md +0 -68
|
@@ -1,1007 +1,48 @@
|
|
|
1
1
|
# Xquik TypeScript Type Definitions
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
balance: string; // Current credit balance, bigint string
|
|
50
|
-
lifetimePurchased: string; // Total credits purchased, bigint string
|
|
51
|
-
lifetimeUsed: string; // Total credits consumed, bigint string
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// ─── API Keys ────────────────────────────────────────────
|
|
55
|
-
|
|
56
|
-
interface ApiKeyCreated {
|
|
57
|
-
id: string;
|
|
58
|
-
fullKey: string;
|
|
59
|
-
prefix: string;
|
|
60
|
-
name: string;
|
|
61
|
-
createdAt: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
interface ApiKey {
|
|
65
|
-
id: string;
|
|
66
|
-
name: string;
|
|
67
|
-
prefix: string;
|
|
68
|
-
isActive: boolean;
|
|
69
|
-
createdAt: string;
|
|
70
|
-
lastUsedAt?: string;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// ─── Monitors ────────────────────────────────────────────
|
|
74
|
-
|
|
75
|
-
interface Monitor {
|
|
76
|
-
id: string;
|
|
77
|
-
username: string;
|
|
78
|
-
xUserId: string;
|
|
79
|
-
eventTypes: EventType[];
|
|
80
|
-
isActive: boolean;
|
|
81
|
-
createdAt: string;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
type EventType =
|
|
85
|
-
| "tweet.new"
|
|
86
|
-
| "tweet.quote"
|
|
87
|
-
| "tweet.reply"
|
|
88
|
-
| "tweet.retweet";
|
|
89
|
-
|
|
90
|
-
// ─── Events ──────────────────────────────────────────────
|
|
91
|
-
|
|
92
|
-
interface Event {
|
|
93
|
-
id: string;
|
|
94
|
-
type: EventType;
|
|
95
|
-
monitorId: string;
|
|
96
|
-
username: string;
|
|
97
|
-
occurredAt: string;
|
|
98
|
-
data: EventData;
|
|
99
|
-
xEventId?: string;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Tweet events (tweet.new, tweet.reply, tweet.quote, tweet.retweet)
|
|
103
|
-
interface TweetEventData {
|
|
104
|
-
tweetId: string;
|
|
105
|
-
text: string;
|
|
106
|
-
metrics: {
|
|
107
|
-
likes: number;
|
|
108
|
-
retweets: number;
|
|
109
|
-
replies: number;
|
|
110
|
-
};
|
|
111
|
-
// tweet.quote only
|
|
112
|
-
quotedTweetId?: string;
|
|
113
|
-
quotedUsername?: string;
|
|
114
|
-
// tweet.reply only
|
|
115
|
-
inReplyToTweetId?: string;
|
|
116
|
-
inReplyToUsername?: string;
|
|
117
|
-
// tweet.retweet only
|
|
118
|
-
retweetedTweetId?: string;
|
|
119
|
-
retweetedUsername?: string;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
type EventData = TweetEventData;
|
|
123
|
-
|
|
124
|
-
interface EventList {
|
|
125
|
-
events: Event[];
|
|
126
|
-
hasMore: boolean;
|
|
127
|
-
nextCursor?: string;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// ─── Webhooks ────────────────────────────────────────────
|
|
131
|
-
|
|
132
|
-
interface WebhookCreated {
|
|
133
|
-
id: string;
|
|
134
|
-
url: string;
|
|
135
|
-
eventTypes: EventType[];
|
|
136
|
-
secret: string;
|
|
137
|
-
createdAt: string;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
interface Webhook {
|
|
141
|
-
id: string;
|
|
142
|
-
url: string;
|
|
143
|
-
eventTypes: EventType[];
|
|
144
|
-
isActive: boolean;
|
|
145
|
-
createdAt: string;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
interface Delivery {
|
|
149
|
-
id: string;
|
|
150
|
-
streamEventId: string;
|
|
151
|
-
status: "pending" | "delivered" | "failed" | "exhausted";
|
|
152
|
-
attempts: number;
|
|
153
|
-
lastStatusCode?: number;
|
|
154
|
-
lastError?: string;
|
|
155
|
-
createdAt: string;
|
|
156
|
-
deliveredAt?: string;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
interface WebhookPayload {
|
|
160
|
-
eventType: EventType;
|
|
161
|
-
username: string;
|
|
162
|
-
data: EventData;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// ─── Draws ───────────────────────────────────────────────
|
|
166
|
-
|
|
167
|
-
interface Draw {
|
|
168
|
-
id: string;
|
|
169
|
-
tweetId: string;
|
|
170
|
-
tweetUrl: string;
|
|
171
|
-
tweetText: string;
|
|
172
|
-
tweetAuthorUsername: string;
|
|
173
|
-
tweetLikeCount: number;
|
|
174
|
-
tweetRetweetCount: number;
|
|
175
|
-
tweetReplyCount: number;
|
|
176
|
-
tweetQuoteCount: number;
|
|
177
|
-
status: "pending" | "running" | "completed" | "failed";
|
|
178
|
-
totalEntries: number;
|
|
179
|
-
validEntries: number;
|
|
180
|
-
createdAt: string;
|
|
181
|
-
drawnAt?: string;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
interface DrawListItem {
|
|
185
|
-
id: string;
|
|
186
|
-
tweetUrl: string;
|
|
187
|
-
status: "pending" | "running" | "completed" | "failed";
|
|
188
|
-
totalEntries: number;
|
|
189
|
-
validEntries: number;
|
|
190
|
-
createdAt: string;
|
|
191
|
-
drawnAt?: string;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
interface DrawWinner {
|
|
195
|
-
position: number;
|
|
196
|
-
authorUsername: string;
|
|
197
|
-
tweetId: string;
|
|
198
|
-
isBackup: boolean;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
interface DrawList {
|
|
202
|
-
draws: DrawListItem[];
|
|
203
|
-
hasMore: boolean;
|
|
204
|
-
nextCursor?: string;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
interface CreateDrawRequest {
|
|
208
|
-
tweetUrl: string;
|
|
209
|
-
winnerCount?: number;
|
|
210
|
-
backupCount?: number;
|
|
211
|
-
uniqueAuthorsOnly?: boolean;
|
|
212
|
-
mustRetweet?: boolean;
|
|
213
|
-
mustFollowUsername?: string;
|
|
214
|
-
filterMinFollowers?: number;
|
|
215
|
-
filterAccountAgeDays?: number;
|
|
216
|
-
filterLanguage?: string;
|
|
217
|
-
requiredKeywords?: string[];
|
|
218
|
-
requiredHashtags?: string[];
|
|
219
|
-
requiredMentions?: string[];
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// ─── Extractions ─────────────────────────────────────────
|
|
223
|
-
|
|
224
|
-
type ExtractionToolType =
|
|
225
|
-
| "article_extractor"
|
|
226
|
-
| "community_extractor"
|
|
227
|
-
| "community_moderator_explorer"
|
|
228
|
-
| "community_post_extractor"
|
|
229
|
-
| "community_search"
|
|
230
|
-
| "favoriters"
|
|
231
|
-
| "follower_explorer"
|
|
232
|
-
| "following_explorer"
|
|
233
|
-
| "list_follower_explorer"
|
|
234
|
-
| "list_member_extractor"
|
|
235
|
-
| "list_post_extractor"
|
|
236
|
-
| "mention_extractor"
|
|
237
|
-
| "people_search"
|
|
238
|
-
| "post_extractor"
|
|
239
|
-
| "quote_extractor"
|
|
240
|
-
| "reply_extractor"
|
|
241
|
-
| "repost_extractor"
|
|
242
|
-
| "space_explorer"
|
|
243
|
-
| "thread_extractor"
|
|
244
|
-
| "tweet_search_extractor"
|
|
245
|
-
| "user_likes"
|
|
246
|
-
| "user_media"
|
|
247
|
-
| "verified_follower_explorer";
|
|
248
|
-
|
|
249
|
-
interface ExtractionJob {
|
|
250
|
-
id: string;
|
|
251
|
-
toolType: ExtractionToolType;
|
|
252
|
-
status: "pending" | "running" | "completed" | "failed";
|
|
253
|
-
totalResults: number;
|
|
254
|
-
targetTweetId?: string;
|
|
255
|
-
targetUsername?: string;
|
|
256
|
-
targetUserId?: string;
|
|
257
|
-
targetCommunityId?: string;
|
|
258
|
-
targetListId?: string;
|
|
259
|
-
targetSpaceId?: string;
|
|
260
|
-
searchQuery?: string;
|
|
261
|
-
resultsLimit?: number; // Max results to extract. Stops early instead of fetching all. Omit for all.
|
|
262
|
-
errorMessage?: string;
|
|
263
|
-
createdAt: string;
|
|
264
|
-
completedAt?: string;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
interface ExtractionResult {
|
|
268
|
-
id: string;
|
|
269
|
-
xUserId: string;
|
|
270
|
-
xUsername?: string;
|
|
271
|
-
xDisplayName?: string;
|
|
272
|
-
xFollowersCount?: number;
|
|
273
|
-
xVerified?: boolean;
|
|
274
|
-
xProfileImageUrl?: string;
|
|
275
|
-
tweetId?: string;
|
|
276
|
-
tweetText?: string;
|
|
277
|
-
tweetCreatedAt?: string;
|
|
278
|
-
createdAt: string;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
interface ExtractionList {
|
|
282
|
-
extractions: ExtractionJob[];
|
|
283
|
-
hasMore: boolean;
|
|
284
|
-
nextCursor?: string;
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
interface ExtractionEstimate {
|
|
288
|
-
allowed: boolean;
|
|
289
|
-
creditsAvailable: string;
|
|
290
|
-
creditsRequired: string;
|
|
291
|
-
source: "replyCount" | "retweetCount" | "quoteCount" | "followers" | "unknown";
|
|
292
|
-
estimatedResults: number;
|
|
293
|
-
resolvedXUserId?: string;
|
|
294
|
-
error?: string;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
interface CreateExtractionRequest {
|
|
298
|
-
toolType: ExtractionToolType;
|
|
299
|
-
targetTweetId?: string;
|
|
300
|
-
targetUsername?: string;
|
|
301
|
-
targetCommunityId?: string;
|
|
302
|
-
targetListId?: string;
|
|
303
|
-
targetSpaceId?: string;
|
|
304
|
-
searchQuery?: string;
|
|
305
|
-
resultsLimit?: number; // Max results to extract. Stops early instead of fetching all. Omit for all.
|
|
306
|
-
// Tweet search filters (tweet_search_extractor only)
|
|
307
|
-
fromUser?: string;
|
|
308
|
-
toUser?: string;
|
|
309
|
-
mentioning?: string;
|
|
310
|
-
language?: string;
|
|
311
|
-
sinceDate?: string; // YYYY-MM-DD
|
|
312
|
-
untilDate?: string; // YYYY-MM-DD
|
|
313
|
-
mediaType?: 'images' | 'videos' | 'gifs' | 'media';
|
|
314
|
-
minFaves?: number;
|
|
315
|
-
minRetweets?: number;
|
|
316
|
-
minReplies?: number;
|
|
317
|
-
verifiedOnly?: boolean;
|
|
318
|
-
replies?: 'include' | 'exclude' | 'only';
|
|
319
|
-
retweets?: 'include' | 'exclude' | 'only';
|
|
320
|
-
exactPhrase?: string;
|
|
321
|
-
excludeWords?: string;
|
|
322
|
-
advancedQuery?: string;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// ─── X API ───────────────────────────────────────────────
|
|
326
|
-
|
|
327
|
-
interface TweetMediaItem {
|
|
328
|
-
mediaUrl: string;
|
|
329
|
-
type: string; // "photo" | "video" | "animated_gif"
|
|
330
|
-
url: string;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
interface Tweet {
|
|
334
|
-
id: string;
|
|
335
|
-
text: string;
|
|
336
|
-
createdAt?: string;
|
|
337
|
-
retweetCount: number;
|
|
338
|
-
replyCount: number;
|
|
339
|
-
likeCount: number;
|
|
340
|
-
quoteCount: number;
|
|
341
|
-
viewCount: number;
|
|
342
|
-
bookmarkCount: number;
|
|
343
|
-
media?: TweetMediaItem[];
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
interface TweetAuthor {
|
|
347
|
-
id: string;
|
|
348
|
-
username: string;
|
|
349
|
-
followers: number;
|
|
350
|
-
verified: boolean;
|
|
351
|
-
profilePicture?: string;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
interface TweetSearchResult {
|
|
355
|
-
id: string;
|
|
356
|
-
text: string;
|
|
357
|
-
createdAt: string;
|
|
358
|
-
likeCount: number; // Omitted if unavailable
|
|
359
|
-
retweetCount: number; // Omitted if unavailable
|
|
360
|
-
replyCount: number; // Omitted if unavailable
|
|
361
|
-
media?: TweetMediaItem[];
|
|
362
|
-
author: {
|
|
363
|
-
id: string;
|
|
364
|
-
username: string;
|
|
365
|
-
name: string;
|
|
366
|
-
verified: boolean;
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
interface UserProfile {
|
|
371
|
-
id: string;
|
|
372
|
-
username: string;
|
|
373
|
-
name: string;
|
|
374
|
-
description?: string;
|
|
375
|
-
followers?: number;
|
|
376
|
-
following?: number;
|
|
377
|
-
verified?: boolean;
|
|
378
|
-
profilePicture?: string;
|
|
379
|
-
location?: string;
|
|
380
|
-
createdAt?: string;
|
|
381
|
-
statusesCount?: number;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
interface FollowerCheck {
|
|
385
|
-
sourceUsername: string;
|
|
386
|
-
targetUsername: string;
|
|
387
|
-
isFollowing: boolean;
|
|
388
|
-
isFollowedBy: boolean;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// ─── User Activity ──────────────────────────────────────
|
|
392
|
-
|
|
393
|
-
interface UserTweetsResponse {
|
|
394
|
-
tweets: Tweet[];
|
|
395
|
-
has_next_page: boolean;
|
|
396
|
-
next_cursor?: string;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
interface UserLikesResponse {
|
|
400
|
-
tweets: Tweet[];
|
|
401
|
-
has_next_page: boolean;
|
|
402
|
-
next_cursor?: string;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
interface UserMediaResponse {
|
|
406
|
-
tweets: Tweet[];
|
|
407
|
-
has_next_page: boolean;
|
|
408
|
-
next_cursor?: string;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
interface TweetFavoritersResponse {
|
|
412
|
-
users: UserProfile[];
|
|
413
|
-
has_next_page: boolean;
|
|
414
|
-
next_cursor?: string;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
interface FollowersYouKnowResponse {
|
|
418
|
-
users: UserProfile[];
|
|
419
|
-
has_next_page: boolean;
|
|
420
|
-
next_cursor?: string;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
// ─── Bookmarks & Timeline ───────────────────────────────
|
|
424
|
-
|
|
425
|
-
interface BookmarksResponse {
|
|
426
|
-
tweets: Tweet[];
|
|
427
|
-
has_next_page: boolean;
|
|
428
|
-
next_cursor?: string;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
interface BookmarkFolder {
|
|
432
|
-
id: string;
|
|
433
|
-
name: string;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
interface BookmarkFoldersResponse {
|
|
437
|
-
folders: BookmarkFolder[];
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
interface NotificationsResponse {
|
|
441
|
-
notifications: Notification[];
|
|
442
|
-
has_next_page: boolean;
|
|
443
|
-
next_cursor?: string;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
interface TimelineResponse {
|
|
447
|
-
tweets: Tweet[];
|
|
448
|
-
has_next_page: boolean;
|
|
449
|
-
next_cursor?: string;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
interface DmHistoryResponse {
|
|
453
|
-
messages: DmMessage[];
|
|
454
|
-
has_next_page: boolean;
|
|
455
|
-
next_cursor?: string;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
interface DmMessage {
|
|
459
|
-
id: string;
|
|
460
|
-
text: string;
|
|
461
|
-
senderId: string;
|
|
462
|
-
createdAt: string;
|
|
463
|
-
media?: TweetMediaItem[];
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// ─── X Articles ─────────────────────────────────────────
|
|
467
|
-
|
|
468
|
-
interface Article {
|
|
469
|
-
title: string;
|
|
470
|
-
coverImage?: string;
|
|
471
|
-
bodyHtml: string;
|
|
472
|
-
likeCount: number;
|
|
473
|
-
retweetCount: number;
|
|
474
|
-
replyCount: number;
|
|
475
|
-
viewCount: number;
|
|
476
|
-
bookmarkCount: number;
|
|
477
|
-
author: {
|
|
478
|
-
id: string;
|
|
479
|
-
username: string;
|
|
480
|
-
name: string;
|
|
481
|
-
};
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// ─── Radar ───────────────────────────────────────────────
|
|
485
|
-
|
|
486
|
-
type RadarSource =
|
|
487
|
-
| "github"
|
|
488
|
-
| "google_trends"
|
|
489
|
-
| "hacker_news"
|
|
490
|
-
| "polymarket"
|
|
491
|
-
| "reddit"
|
|
492
|
-
| "trustmrr"
|
|
493
|
-
| "wikipedia";
|
|
494
|
-
|
|
495
|
-
type RadarCategory =
|
|
496
|
-
| "general"
|
|
497
|
-
| "tech"
|
|
498
|
-
| "dev"
|
|
499
|
-
| "science"
|
|
500
|
-
| "culture"
|
|
501
|
-
| "politics"
|
|
502
|
-
| "business"
|
|
503
|
-
| "entertainment";
|
|
504
|
-
|
|
505
|
-
interface RadarItem {
|
|
506
|
-
id: string;
|
|
507
|
-
title: string;
|
|
508
|
-
description?: string;
|
|
509
|
-
url?: string;
|
|
510
|
-
imageUrl?: string;
|
|
511
|
-
source: RadarSource;
|
|
512
|
-
sourceId: string;
|
|
513
|
-
category: RadarCategory;
|
|
514
|
-
region: string;
|
|
515
|
-
language: string;
|
|
516
|
-
score: number;
|
|
517
|
-
metadata: Record<string, unknown>;
|
|
518
|
-
publishedAt: string;
|
|
519
|
-
createdAt: string;
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
// ─── Download Media ─────────────────────────────────────
|
|
523
|
-
|
|
524
|
-
interface DownloadMediaRequest {
|
|
525
|
-
tweetInput?: string; // Tweet URL or numeric tweet ID (single mode)
|
|
526
|
-
tweetIds?: string[]; // Array of tweet URLs or IDs (bulk mode, max 50). Exactly 1 of tweetInput or tweetIds required.
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
interface DownloadMediaSingleResponse {
|
|
530
|
-
tweetId: string; // Resolved tweet ID
|
|
531
|
-
galleryUrl: string; // Shareable gallery page URL
|
|
532
|
-
cacheHit: boolean; // true if served from cache (no usage consumed)
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
interface DownloadMediaBulkResponse {
|
|
536
|
-
galleryUrl: string; // Combined gallery page URL
|
|
537
|
-
totalTweets: number; // Number of tweets processed
|
|
538
|
-
totalMedia: number; // Total media items downloaded
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
// ─── Trends ──────────────────────────────────────────────
|
|
542
|
-
|
|
543
|
-
interface Trend {
|
|
544
|
-
name: string;
|
|
545
|
-
description?: string;
|
|
546
|
-
rank?: number;
|
|
547
|
-
query?: string;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
interface TrendList {
|
|
551
|
-
trends: Trend[];
|
|
552
|
-
total: number;
|
|
553
|
-
woeid: number;
|
|
554
|
-
}
|
|
555
|
-
|
|
556
|
-
// ─── Support ────────────────────────────────────────────
|
|
557
|
-
|
|
558
|
-
interface SupportTicket {
|
|
559
|
-
id: string;
|
|
560
|
-
subject: string;
|
|
561
|
-
status: string;
|
|
562
|
-
createdAt: string;
|
|
563
|
-
updatedAt: string;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
interface SupportMessage {
|
|
567
|
-
id: string;
|
|
568
|
-
body: string;
|
|
569
|
-
sender: string;
|
|
570
|
-
createdAt: string;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
interface CreateTicketRequest {
|
|
574
|
-
subject: string;
|
|
575
|
-
body: string;
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
// ─── Error ───────────────────────────────────────────────
|
|
579
|
-
|
|
580
|
-
interface ApiError {
|
|
581
|
-
error: string;
|
|
582
|
-
limit?: number;
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
// ─── Request Bodies ──────────────────────────────────────
|
|
586
|
-
|
|
587
|
-
interface CreateMonitorRequest {
|
|
588
|
-
username: string;
|
|
589
|
-
eventTypes: EventType[];
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
interface UpdateMonitorRequest {
|
|
593
|
-
eventTypes?: EventType[];
|
|
594
|
-
isActive?: boolean;
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
interface CreateWebhookRequest {
|
|
598
|
-
url: string;
|
|
599
|
-
eventTypes: EventType[];
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
interface UpdateWebhookRequest {
|
|
603
|
-
url?: string;
|
|
604
|
-
eventTypes?: EventType[];
|
|
605
|
-
isActive?: boolean;
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
interface CreateApiKeyRequest {
|
|
609
|
-
name?: string;
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
// --- Tweet Style Cache ---
|
|
613
|
-
|
|
614
|
-
interface TweetStyleCache {
|
|
615
|
-
xUsername: string;
|
|
616
|
-
tweetCount: number;
|
|
617
|
-
isOwnAccount: boolean;
|
|
618
|
-
fetchedAt: string; // ISO 8601
|
|
619
|
-
tweets: CachedTweet[];
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
interface CachedTweet {
|
|
623
|
-
id: string;
|
|
624
|
-
text: string;
|
|
625
|
-
authorUsername: string;
|
|
626
|
-
createdAt: string; // ISO 8601
|
|
627
|
-
media?: TweetMediaItem[];
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
interface TweetStyleSummary {
|
|
631
|
-
xUsername: string;
|
|
632
|
-
tweetCount: number;
|
|
633
|
-
isOwnAccount: boolean;
|
|
634
|
-
fetchedAt: string;
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
interface StyleComparison {
|
|
638
|
-
style1: TweetStyleCache;
|
|
639
|
-
style2: TweetStyleCache;
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
interface StylePerformance {
|
|
643
|
-
xUsername: string;
|
|
644
|
-
tweetCount: number;
|
|
645
|
-
tweets: PerformanceTweet[];
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
interface PerformanceTweet {
|
|
649
|
-
id: string;
|
|
650
|
-
text: string;
|
|
651
|
-
likeCount: number;
|
|
652
|
-
retweetCount: number;
|
|
653
|
-
replyCount: number;
|
|
654
|
-
quoteCount: number;
|
|
655
|
-
viewCount: number;
|
|
656
|
-
bookmarkCount: number;
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
// --- Tweet Drafts ---
|
|
660
|
-
|
|
661
|
-
interface TweetDraft {
|
|
662
|
-
id: string;
|
|
663
|
-
text: string;
|
|
664
|
-
topic?: string;
|
|
665
|
-
goal?: "engagement" | "followers" | "authority" | "conversation";
|
|
666
|
-
createdAt: string; // ISO 8601
|
|
667
|
-
updatedAt: string; // ISO 8601
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
interface TweetDraftList {
|
|
671
|
-
drafts: TweetDraft[];
|
|
672
|
-
afterCursor: string | null;
|
|
673
|
-
hasMore: boolean;
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
// --- Account Identity ---
|
|
677
|
-
|
|
678
|
-
interface XIdentityResponse {
|
|
679
|
-
success: boolean;
|
|
680
|
-
xUsername: string;
|
|
681
|
-
}
|
|
682
|
-
```
|
|
683
|
-
|
|
684
|
-
## REST API vs MCP Field Naming
|
|
685
|
-
|
|
686
|
-
The REST API and MCP server use different field names for the same data. Map these when switching between interfaces:
|
|
687
|
-
|
|
688
|
-
| Type | REST API Field | MCP Field |
|
|
689
|
-
|------|---------------|-----------|
|
|
690
|
-
| **Monitor** | `username` | `xUsername` |
|
|
691
|
-
| **Event** | `type` | `eventType` |
|
|
692
|
-
| **Event** | `data` | `eventData` |
|
|
693
|
-
| **Event** | `monitorId` | `monitoredAccountId` |
|
|
694
|
-
| **UserProfile** | `followers` | `followersCount` |
|
|
695
|
-
| **UserProfile** | `following` | `followingCount` |
|
|
696
|
-
| **FollowerCheck** | `isFollowing` / `isFollowedBy` | `following` / `followedBy` |
|
|
697
|
-
|
|
698
|
-
**MCP `get-user-info` returns a subset** of the full `UserProfile` type. Fields not returned by MCP: `verified`, `location`, `createdAt`, `statusesCount`. Use the REST API `GET /x/users/{id}` for the complete profile.
|
|
699
|
-
|
|
700
|
-
## MCP Output Schemas
|
|
701
|
-
|
|
702
|
-
MCP tools return structured data with these shapes. Field names differ from the REST API (see mapping table above).
|
|
703
|
-
|
|
704
|
-
```typescript
|
|
705
|
-
// ─── MCP: get-user-info ─────────────────────────────────
|
|
706
|
-
|
|
707
|
-
interface McpUserInfo {
|
|
708
|
-
username: string; // X username (without @)
|
|
709
|
-
name: string; // Display name
|
|
710
|
-
description: string; // User bio text
|
|
711
|
-
followersCount: number; // Number of followers
|
|
712
|
-
followingCount: number; // Number of accounts followed
|
|
713
|
-
profilePicture: string; // Profile picture URL
|
|
714
|
-
// Not returned: verified, location, createdAt, statusesCount
|
|
715
|
-
// Use REST GET /x/users/{id} for the full profile
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
// ─── MCP: search-tweets ─────────────────────────────────
|
|
719
|
-
|
|
720
|
-
interface McpSearchResult {
|
|
721
|
-
tweets: {
|
|
722
|
-
id: string; // Tweet ID (use with lookup-tweet for full metrics)
|
|
723
|
-
text: string; // Full tweet text
|
|
724
|
-
authorUsername: string; // X username of the tweet author
|
|
725
|
-
authorName: string; // Display name of the tweet author
|
|
726
|
-
createdAt: string; // ISO 8601 timestamp when tweet was posted
|
|
727
|
-
media?: { mediaUrl: string; type: string; url: string }[]; // Attached photos/videos
|
|
728
|
-
// No engagement metrics. Use lookup-tweet for those
|
|
729
|
-
}[];
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
// ─── MCP: lookup-tweet ──────────────────────────────────
|
|
733
|
-
|
|
734
|
-
interface McpTweetLookup {
|
|
735
|
-
tweet: {
|
|
736
|
-
id: string; // Tweet ID
|
|
737
|
-
text: string; // Tweet text
|
|
738
|
-
likeCount: number; // Number of likes
|
|
739
|
-
retweetCount: number; // Number of retweets
|
|
740
|
-
replyCount: number; // Number of replies
|
|
741
|
-
quoteCount: number; // Number of quote tweets
|
|
742
|
-
viewCount: number; // Number of views
|
|
743
|
-
bookmarkCount: number; // Number of bookmarks
|
|
744
|
-
media?: { mediaUrl: string; type: string; url: string }[]; // Attached photos/videos
|
|
745
|
-
};
|
|
746
|
-
author?: { // Tweet author details
|
|
747
|
-
id: string; // Author user ID
|
|
748
|
-
username: string; // Author X username
|
|
749
|
-
followers: number; // Author follower count
|
|
750
|
-
verified: boolean; // Whether the author is verified
|
|
751
|
-
};
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
// ─── MCP: check-follow ─────────────────────────────────
|
|
755
|
-
|
|
756
|
-
interface McpFollowCheck {
|
|
757
|
-
following: boolean; // Whether the source follows the target
|
|
758
|
-
followedBy: boolean; // Whether the target follows the source
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
// ─── MCP: get-events ────────────────────────────────────
|
|
762
|
-
|
|
763
|
-
interface McpEventList {
|
|
764
|
-
events: {
|
|
765
|
-
id: string; // Event ID (use with get-event for full details)
|
|
766
|
-
xUsername: string; // Username of the monitored account
|
|
767
|
-
eventType: string; // Event type (tweet.new, tweet.reply, etc.)
|
|
768
|
-
eventData: unknown; // Full event payload (tweet text, author, metrics)
|
|
769
|
-
monitoredAccountId: string; // ID of the monitored account
|
|
770
|
-
createdAt: string; // ISO 8601 when event was recorded
|
|
771
|
-
occurredAt: string; // ISO 8601 when event occurred on X
|
|
772
|
-
}[];
|
|
773
|
-
hasMore: boolean; // Whether more results are available
|
|
774
|
-
nextCursor?: string; // Pass as afterCursor to fetch the next page
|
|
775
|
-
}
|
|
776
|
-
|
|
777
|
-
// ─── MCP: list-monitors ─────────────────────────────────
|
|
778
|
-
|
|
779
|
-
interface McpMonitorList {
|
|
780
|
-
monitors: {
|
|
781
|
-
id: string; // Monitor ID (use with remove-monitor, get-events monitorId filter)
|
|
782
|
-
xUsername: string; // Monitored X username
|
|
783
|
-
eventTypes: string[]; // Subscribed event types
|
|
784
|
-
isActive: boolean; // Whether the monitor is currently active
|
|
785
|
-
createdAt: string; // ISO 8601 timestamp
|
|
786
|
-
}[];
|
|
787
|
-
}
|
|
788
|
-
|
|
789
|
-
// ─── MCP: add-webhook ───────────────────────────────────
|
|
790
|
-
|
|
791
|
-
interface McpWebhookCreated {
|
|
792
|
-
id: string; // Webhook ID
|
|
793
|
-
url: string; // HTTPS endpoint URL
|
|
794
|
-
eventTypes: string[]; // Event types delivered to this webhook
|
|
795
|
-
isActive: boolean; // Whether the webhook is active
|
|
796
|
-
createdAt: string; // ISO 8601 timestamp
|
|
797
|
-
secret: string; // HMAC signing secret for verifying webhook payloads. Store securely.
|
|
798
|
-
}
|
|
799
|
-
|
|
800
|
-
// ─── MCP: test-webhook ──────────────────────────────────
|
|
801
|
-
|
|
802
|
-
interface McpWebhookTest {
|
|
803
|
-
success: boolean;
|
|
804
|
-
statusCode: number;
|
|
805
|
-
error?: string;
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
// ─── MCP: run-extraction ────────────────────────────────
|
|
809
|
-
|
|
810
|
-
interface McpExtractionJob {
|
|
811
|
-
id: string; // Extraction job ID (use with get-extraction for results)
|
|
812
|
-
toolType: string; // Extraction tool type used
|
|
813
|
-
status: string; // Job status
|
|
814
|
-
totalResults: number; // Number of results extracted
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
// ─── MCP: estimate-extraction ───────────────────────────
|
|
818
|
-
|
|
819
|
-
interface McpExtractionEstimate {
|
|
820
|
-
allowed?: boolean; // Whether the extraction is allowed within budget
|
|
821
|
-
estimatedResults?: number; // Estimated number of results
|
|
822
|
-
creditsRequired?: string; // Required credits, bigint string
|
|
823
|
-
creditsAvailable?: string; // Available credits, bigint string
|
|
824
|
-
source?: string; // Data source used for estimation
|
|
825
|
-
resolvedXUserId?: string; // Resolved user ID for username-based estimates
|
|
826
|
-
error?: string; // Error message if estimation failed
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
// ─── MCP: run-draw ──────────────────────────────────────
|
|
830
|
-
|
|
831
|
-
interface McpDrawResult {
|
|
832
|
-
id: string; // Draw ID (use with get-draw for full details)
|
|
833
|
-
tweetId: string; // Giveaway tweet ID
|
|
834
|
-
totalEntries: number; // Total reply count before filtering
|
|
835
|
-
validEntries: number; // Valid entries after filtering
|
|
836
|
-
winners: {
|
|
837
|
-
position: number; // Winner position (1-based)
|
|
838
|
-
authorUsername: string; // X username of the winner
|
|
839
|
-
tweetId: string; // Tweet ID of the winning reply
|
|
840
|
-
isBackup: boolean; // Whether this is a backup winner
|
|
841
|
-
}[];
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
// ─── MCP: get-draw ──────────────────────────────────────
|
|
845
|
-
|
|
846
|
-
interface McpDrawDetails {
|
|
847
|
-
draw: {
|
|
848
|
-
id: string; // Draw ID
|
|
849
|
-
status: string; // Draw status (completed, failed)
|
|
850
|
-
createdAt: string; // ISO 8601 timestamp
|
|
851
|
-
drawnAt?: string; // ISO 8601 timestamp when winners were drawn
|
|
852
|
-
totalEntries: number; // Total reply count before filtering
|
|
853
|
-
validEntries: number; // Entries remaining after filters applied
|
|
854
|
-
tweetId: string; // Giveaway tweet ID
|
|
855
|
-
tweetUrl: string; // Full URL of the giveaway tweet
|
|
856
|
-
tweetText: string; // Giveaway tweet text
|
|
857
|
-
tweetAuthorUsername: string; // Username of the giveaway tweet author
|
|
858
|
-
tweetLikeCount: number; // Tweet like count at draw time
|
|
859
|
-
tweetRetweetCount: number; // Tweet retweet count at draw time
|
|
860
|
-
tweetReplyCount: number; // Tweet reply count at draw time
|
|
861
|
-
tweetQuoteCount: number; // Tweet quote count at draw time
|
|
862
|
-
};
|
|
863
|
-
winners: {
|
|
864
|
-
position: number; // Winner position (1-based)
|
|
865
|
-
authorUsername: string; // X username of the winner
|
|
866
|
-
tweetId: string; // Tweet ID of the winning reply
|
|
867
|
-
isBackup: boolean; // Whether this is a backup winner
|
|
868
|
-
}[];
|
|
869
|
-
}
|
|
870
|
-
|
|
871
|
-
// ─── MCP: get-account ───────────────────────────────────
|
|
872
|
-
|
|
873
|
-
interface McpAccount {
|
|
874
|
-
plan: "active" | "inactive";
|
|
875
|
-
monitorsAllowed: number; // Deprecated; monitor slots are unlimited
|
|
876
|
-
monitorsUsed: number; // Number of active monitors
|
|
877
|
-
monitorUsage: {
|
|
878
|
-
activeDailyEstimate: string;
|
|
879
|
-
activeHourlyBurn: string;
|
|
880
|
-
creditsPerActiveMonitorDay: string;
|
|
881
|
-
creditsPerActiveMonitorHour: string;
|
|
882
|
-
eventsIncluded: boolean;
|
|
883
|
-
instantCheckIntervalSeconds: number;
|
|
884
|
-
unlimitedSlots: boolean;
|
|
885
|
-
};
|
|
886
|
-
creditInfo?: {
|
|
887
|
-
balance: string;
|
|
888
|
-
lifetimePurchased: string;
|
|
889
|
-
lifetimeUsed: string;
|
|
890
|
-
};
|
|
891
|
-
xUsername?: string;
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
// ─── MCP: get-trends ────────────────────────────────────
|
|
895
|
-
|
|
896
|
-
interface McpTrends {
|
|
897
|
-
woeid: number;
|
|
898
|
-
total: number;
|
|
899
|
-
trends: {
|
|
900
|
-
name: string; // Trend name or hashtag
|
|
901
|
-
rank?: number; // Trend rank position
|
|
902
|
-
description?: string; // Trend description or context
|
|
903
|
-
query?: string; // Search query to find tweets for this trend
|
|
904
|
-
}[];
|
|
905
|
-
}
|
|
906
|
-
|
|
907
|
-
// ─── MCP: compose-tweet ────────────────────────────────
|
|
908
|
-
|
|
909
|
-
interface McpComposeTweet {
|
|
910
|
-
algorithmInsights: {
|
|
911
|
-
name: string; // Signal name from PhoenixScores
|
|
912
|
-
polarity: "positive" | "negative"; // Whether this signal helps or hurts ranking
|
|
913
|
-
description: string; // What this signal measures
|
|
914
|
-
}[];
|
|
915
|
-
contentRules: {
|
|
916
|
-
rule: string; // Actionable content rule
|
|
917
|
-
description: string; // Why this rule matters based on algorithm architecture
|
|
918
|
-
}[];
|
|
919
|
-
engagementMultipliers: {
|
|
920
|
-
action: string; // Engagement action (e.g. reply chain, quote tweet)
|
|
921
|
-
multiplier: string; // Relative value compared to a like (e.g. "27x a like")
|
|
922
|
-
source: string; // Data source for this multiplier
|
|
923
|
-
}[];
|
|
924
|
-
engagementVelocity: string; // How early engagement velocity affects distribution
|
|
925
|
-
followUpQuestions: string[]; // Questions for the AI to ask the user before composing
|
|
926
|
-
scorerWeights: {
|
|
927
|
-
signal: string; // Signal name in the scoring model
|
|
928
|
-
weight: number; // Weight applied to predicted probability
|
|
929
|
-
context: string; // Practical meaning of this weight
|
|
930
|
-
}[];
|
|
931
|
-
topPenalties: string[]; // Most severe negative signals to avoid
|
|
932
|
-
source: string; // Attribution to algorithm source code
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
// ─── MCP: refine-tweet ─────────────────────────────────
|
|
936
|
-
|
|
937
|
-
interface McpRefineTweet {
|
|
938
|
-
compositionGuidance: string[]; // Targeted guidance based on user preferences
|
|
939
|
-
examplePatterns: {
|
|
940
|
-
pattern: string; // Tweet structure template
|
|
941
|
-
description: string; // What this pattern achieves
|
|
942
|
-
}[];
|
|
943
|
-
}
|
|
944
|
-
|
|
945
|
-
// ─── MCP: score-tweet ──────────────────────────────────
|
|
946
|
-
|
|
947
|
-
interface McpScoreTweet {
|
|
948
|
-
totalChecks: number; // Total number of checks performed
|
|
949
|
-
passedCount: number; // Number of checks that passed
|
|
950
|
-
topSuggestion: string; // Highest-impact improvement suggestion
|
|
951
|
-
checklist: {
|
|
952
|
-
factor: string; // What was checked
|
|
953
|
-
passed: boolean; // Whether the check passed
|
|
954
|
-
suggestion?: string; // Improvement suggestion (present only if failed)
|
|
955
|
-
}[];
|
|
956
|
-
}
|
|
957
|
-
|
|
958
|
-
// ─── X Accounts (Connected) ──────────────────────────
|
|
959
|
-
|
|
960
|
-
interface ConnectedXAccount {
|
|
961
|
-
id: string; // Unique account ID
|
|
962
|
-
username: string; // X username
|
|
963
|
-
displayName?: string; // Display name on X
|
|
964
|
-
isActive: boolean; // Whether the connection is active
|
|
965
|
-
createdAt: string; // ISO 8601 timestamp
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
// Connecting an X account is done by the user in the Xquik dashboard,
|
|
969
|
-
// not through this skill. The skill never handles X login material.
|
|
970
|
-
|
|
971
|
-
// ─── X Write ──────────────────────────────────────────
|
|
972
|
-
|
|
973
|
-
interface CreateTweetRequest {
|
|
974
|
-
account: string; // Connected X username or account ID
|
|
975
|
-
text?: string; // Tweet text (required unless media is provided)
|
|
976
|
-
reply_to_tweet_id?: string; // Tweet ID to reply to
|
|
977
|
-
attachment_url?: string; // URL to attach as card
|
|
978
|
-
community_id?: string; // Community ID to post into
|
|
979
|
-
is_note_tweet?: boolean; // Long-form note tweet (up to 25,000 chars)
|
|
980
|
-
media?: string[]; // Public image URLs, such as mediaUrl from POST /x/media
|
|
981
|
-
}
|
|
982
|
-
|
|
983
|
-
interface CreateTweetResponse {
|
|
984
|
-
tweetId: string; // ID of the newly created tweet
|
|
985
|
-
success: boolean; // Always true on success
|
|
986
|
-
}
|
|
987
|
-
|
|
988
|
-
interface WriteActionRequest {
|
|
989
|
-
account: string; // Connected X username or account ID
|
|
990
|
-
}
|
|
991
|
-
|
|
992
|
-
interface SendDmRequest {
|
|
993
|
-
account: string; // Connected X username or account ID
|
|
994
|
-
text: string; // Message text
|
|
995
|
-
media_ids?: string[]; // Media IDs to attach
|
|
996
|
-
reply_to_message_id?: string; // Message ID to reply to
|
|
997
|
-
}
|
|
998
|
-
|
|
999
|
-
interface UpdateProfileRequest {
|
|
1000
|
-
account: string; // Connected X username or account ID
|
|
1001
|
-
name?: string; // Display name
|
|
1002
|
-
description?: string; // Bio
|
|
1003
|
-
location?: string; // Location
|
|
1004
|
-
url?: string; // Website URL
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
```
|
|
3
|
+
Routing index for TypeScript response and request shapes. Load only the type section needed for the user task.
|
|
4
|
+
|
|
5
|
+
| Need | Reference |
|
|
6
|
+
|---|---|
|
|
7
|
+
| Account | [account.md](types-account.md) |
|
|
8
|
+
| Credits | [credits.md](types-credits.md) |
|
|
9
|
+
| API Keys | [api-keys.md](types-api-keys.md) |
|
|
10
|
+
| Monitors | [monitors.md](types-monitors.md) |
|
|
11
|
+
| Events | [events.md](types-events.md) |
|
|
12
|
+
| Webhooks | [webhooks.md](types-webhooks.md) |
|
|
13
|
+
| Draws | [draws.md](types-draws.md) |
|
|
14
|
+
| Extractions | [extractions.md](types-extractions.md) |
|
|
15
|
+
| X API | [x-api.md](types-x-api.md) |
|
|
16
|
+
| User Activity | [user-activity.md](types-user-activity.md) |
|
|
17
|
+
| Bookmarks & Timeline | [bookmarks-and-timeline.md](types-bookmarks-and-timeline.md) |
|
|
18
|
+
| X Articles | [x-articles.md](types-x-articles.md) |
|
|
19
|
+
| Radar | [radar.md](types-radar.md) |
|
|
20
|
+
| Download Media | [download-media.md](types-download-media.md) |
|
|
21
|
+
| Trends | [trends.md](types-trends.md) |
|
|
22
|
+
| Support | [support.md](types-support.md) |
|
|
23
|
+
| Error | [error.md](types-error.md) |
|
|
24
|
+
| Request Bodies | [request-bodies.md](types-request-bodies.md) |
|
|
25
|
+
| Tweet Style Cache | [tweet-style-cache.md](types-tweet-style-cache.md) |
|
|
26
|
+
| Tweet Drafts | [tweet-drafts.md](types-tweet-drafts.md) |
|
|
27
|
+
| Account Identity | [account-identity.md](types-account-identity.md) |
|
|
28
|
+
| REST API vs MCP Field Naming | [rest-api-vs-mcp-field-naming.md](types-rest-api-vs-mcp-field-naming.md) |
|
|
29
|
+
| MCP Output Schemas | [mcp-output-schemas.md](types-mcp-output-schemas.md) |
|
|
30
|
+
| MCP: get-user-info | [mcp-get-user-info.md](types-mcp-get-user-info.md) |
|
|
31
|
+
| MCP: search-tweets | [mcp-search-tweets.md](types-mcp-search-tweets.md) |
|
|
32
|
+
| MCP: lookup-tweet | [mcp-lookup-tweet.md](types-mcp-lookup-tweet.md) |
|
|
33
|
+
| MCP: check-follow | [mcp-check-follow.md](types-mcp-check-follow.md) |
|
|
34
|
+
| MCP: get-events | [mcp-get-events.md](types-mcp-get-events.md) |
|
|
35
|
+
| MCP: list-monitors | [mcp-list-monitors.md](types-mcp-list-monitors.md) |
|
|
36
|
+
| MCP: add-webhook | [mcp-add-webhook.md](types-mcp-add-webhook.md) |
|
|
37
|
+
| MCP: test-webhook | [mcp-test-webhook.md](types-mcp-test-webhook.md) |
|
|
38
|
+
| MCP: run-extraction | [mcp-run-extraction.md](types-mcp-run-extraction.md) |
|
|
39
|
+
| MCP: estimate-extraction | [mcp-estimate-extraction.md](types-mcp-estimate-extraction.md) |
|
|
40
|
+
| MCP: run-draw | [mcp-run-draw.md](types-mcp-run-draw.md) |
|
|
41
|
+
| MCP: get-draw | [mcp-get-draw.md](types-mcp-get-draw.md) |
|
|
42
|
+
| MCP: get-account | [mcp-get-account.md](types-mcp-get-account.md) |
|
|
43
|
+
| MCP: get-trends | [mcp-get-trends.md](types-mcp-get-trends.md) |
|
|
44
|
+
| MCP: compose-tweet | [mcp-compose-tweet.md](types-mcp-compose-tweet.md) |
|
|
45
|
+
| MCP: refine-tweet | [mcp-refine-tweet.md](types-mcp-refine-tweet.md) |
|
|
46
|
+
| MCP: score-tweet | [mcp-score-tweet.md](types-mcp-score-tweet.md) |
|
|
47
|
+
| X Accounts (Connected) | [x-accounts.md](types-x-accounts.md) |
|
|
48
|
+
| X Write | [x-write.md](types-x-write.md) |
|