@twitterapis/mcp 0.6.7 → 0.6.8
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/CHANGELOG.md +18 -2
- package/package.json +1 -1
- package/src/tools.js +16 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.8 (2026-08-10)
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- **`twitter_article_get` gains an owner-only `article_id` form** (task #12, competitor parity): pass `article_id` (the article's own entity id, from `twitter_article_create` or `twitter_article_list`) to read one of your own articles by id, including Drafts, which have no announcement tweet the existing public `id`/`url` form could resolve. Requires a registered session or per-call `auth_token`/`ct0`, same as the other authenticated article tools. Returns `article: null` when the id is not found or not owned by the calling account, X exposes no dedicated get-by-id op, so this scans the caller's own Draft then Published lists and matches client-side, same approach `article/delete` already used for lifecycle resolution.
|
|
8
|
+
|
|
3
9
|
## 0.6.7 (2026-08-10)
|
|
4
10
|
|
|
5
11
|
### Added
|
|
6
12
|
|
|
7
13
|
- **8 new tools for X's long-form Articles/Notes feature** (#1096): `twitter_article_create`, `twitter_article_update_title`, `twitter_article_update_content`, `twitter_article_publish`, `twitter_article_unpublish`, `twitter_article_get`, `twitter_article_list`, `twitter_article_delete`. `twitter_article_get` is a public read (no session required, like `twitter_tweet_detail`); the other 7 require a customer session. The catalog is now **60 tools: 39 reads and 21 write actions**.
|
|
8
14
|
|
|
9
|
-
##
|
|
15
|
+
## 0.6.6 (2026-08-09)
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **`twitter_customer_session_delete`**, the self-serve counterpart to `twitter_customer_session`: the backend has shipped this revoke endpoint since PR #188, but no published surface carried it, so an agent could link a session with no documented way to unlink it. Takes no body field and no header beyond the API key; the handler resolves the session to delete from the auth context, which is what makes cross-key deletion impossible. Placed next to `twitter_customer_session` so the way out sits beside the way in. The catalog is now **52 tools: 37 reads and 15 write actions**.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- **`twitter_user_login` was missing `proxy_url` and `user_agent`**, which the backend handler reads and stores on the resulting session, governing that session's ongoing egress and fingerprint rather than just the one login call. Both were undocumented and therefore uncallable through the tool. Verified against `src/server/routes/user-login.ts`, not the spec.
|
|
24
|
+
|
|
25
|
+
## 0.6.5 (2026-08-06)
|
|
10
26
|
|
|
11
27
|
### Changed
|
|
12
28
|
|
|
@@ -37,7 +53,7 @@
|
|
|
37
53
|
|
|
38
54
|
- Release tooling hardened. No user-facing or API behaviour change.
|
|
39
55
|
|
|
40
|
-
##
|
|
56
|
+
## 0.6.2 (2026-07-21)
|
|
41
57
|
|
|
42
58
|
### Added
|
|
43
59
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twitterapis/mcp",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.8",
|
|
4
4
|
"description": "Official MCP server for twitterapis.com, the Twitter/X API (search, users, followers, tweets, threads, lists, likes, bookmarks, DMs) plus write actions (post/like/retweet/follow) as native tools for Claude, Cursor, and any MCP client.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
package/src/tools.js
CHANGED
|
@@ -1240,7 +1240,7 @@ export const TOOLS = [
|
|
|
1240
1240
|
name: "twitter_article_get",
|
|
1241
1241
|
path: "/twitter/article/get",
|
|
1242
1242
|
description:
|
|
1243
|
-
"Read
|
|
1243
|
+
"Read an article's full content (title, content_state, cover media, author, timestamps, public_url). Two mutually exclusive forms. PUBLIC: provide id or url of the article's announcement tweet, no registered session or per-call credentials needed, just your API key, same auth model as twitter_tweet_detail, works for PUBLISHED articles only. OWNER-ONLY: provide article_id (the article's own entity id, from twitter_article_create or twitter_article_list), requires an authenticated session, also reaches your own Drafts, which have no announcement tweet the public form could resolve. Returns 404 (article null) if not found, not visible, or (article_id form) not owned by the calling account.",
|
|
1244
1244
|
shape: {
|
|
1245
1245
|
id: z.string().optional().describe(
|
|
1246
1246
|
"Tweet/post numeric id (e.g. \"1789012345678901234\"). Provide exactly one of id or url.",
|
|
@@ -1248,6 +1248,21 @@ export const TOOLS = [
|
|
|
1248
1248
|
url: z.string().optional().describe(
|
|
1249
1249
|
"Full tweet URL, e.g. \"https://x.com/elonmusk/status/1789012345678901234\". Provide exactly one of id or url.",
|
|
1250
1250
|
),
|
|
1251
|
+
article_id: z.string().optional().describe(
|
|
1252
|
+
"OWNER-ONLY form. The article's own entity id, from twitter_article_create or twitter_article_list (e.g. 'ArticleEntity:1234567890123456789', or the bare numeric rest_id). Requires an authenticated session. Provide exactly one of id, url, or article_id.",
|
|
1253
|
+
),
|
|
1254
|
+
auth_token: z.string().optional().describe(
|
|
1255
|
+
"Optional. The account's auth_token cookie, to act AS that account for this call (must be paired with ct0). Sent as the x-auth-token header; never placed in the URL.",
|
|
1256
|
+
),
|
|
1257
|
+
ct0: z.string().optional().describe(
|
|
1258
|
+
"Optional. The account's ct0 cookie, paired with auth_token. Sent as the x-ct0 header.",
|
|
1259
|
+
),
|
|
1260
|
+
proxy_url: z.string().optional().describe(
|
|
1261
|
+
"Optional. Residential proxy URL to egress this call through. Recommended for writes: X soft-blocks writes from datacenter IPs as automated. Sent as the x-proxy-url header.",
|
|
1262
|
+
),
|
|
1263
|
+
user_agent: z.string().optional().describe(
|
|
1264
|
+
"Optional. User-Agent string to send for this session. Sent as the x-user-agent header.",
|
|
1265
|
+
),
|
|
1251
1266
|
},
|
|
1252
1267
|
},
|
|
1253
1268
|
{
|