@twitterapis/mcp 0.11.0 → 0.11.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/CHANGELOG.md +23 -0
- package/package.json +1 -1
- package/src/tools.js +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.11.1 (2026-09-13)
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- `twitter_update_profile`: an empty string CLEARS a field. The tool description said
|
|
7
|
+
the opposite, and 0.11.0 shipped that to npm. It was true of the API when written
|
|
8
|
+
and stopped being true when the handler was fixed the same day.
|
|
9
|
+
|
|
10
|
+
### Notes
|
|
11
|
+
- A PATCH, not a minor: the catalog is unchanged at 107 tools, 65 reads and 42 writes.
|
|
12
|
+
Only description text moves, which `scripts/prepublish-version-class.mjs` confirms.
|
|
13
|
+
- The claim is now verified the only way that works on this endpoint: by sending a
|
|
14
|
+
value that CHANGES and reading the profile back. The previous check used a
|
|
15
|
+
byte-for-byte no-op, which is the one test that cannot fail, since the profile looks
|
|
16
|
+
identical whether the write applied or was silently dropped.
|
|
17
|
+
- Why it matters that this was wrong rather than merely vague: the old text told a
|
|
18
|
+
model that `description: ""` was a harmless no-op. After the handler fix, that exact
|
|
19
|
+
call blanks the field. A description that is confidently wrong about a destructive
|
|
20
|
+
operation is worse than one that says nothing.
|
|
21
|
+
- Separately, writes to this endpoint are sometimes accepted upstream and sometimes
|
|
22
|
+
refused, and only some refusals are classified honestly. That is a defect under
|
|
23
|
+
repair on the API side, not part of this tool's contract, so it is deliberately not
|
|
24
|
+
written into the description.
|
|
25
|
+
|
|
3
26
|
## 0.11.0 (2026-09-13)
|
|
4
27
|
|
|
5
28
|
### Added
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twitterapis/mcp",
|
|
3
3
|
"mcpName": "io.github.TwitterAPIs/twitterapis-mcp",
|
|
4
|
-
"version": "0.11.
|
|
4
|
+
"version": "0.11.1",
|
|
5
5
|
"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.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
package/src/tools.js
CHANGED
|
@@ -1168,16 +1168,16 @@ export const TOOLS = [
|
|
|
1168
1168
|
write: true,
|
|
1169
1169
|
jsonBody: true,
|
|
1170
1170
|
description:
|
|
1171
|
-
"Change the display name, bio, location or link on your authenticated account's own X profile. This is a PARTIAL update: send only the fields you want to change and everything you omit keeps its current value, so passing just a name will NOT wipe the bio. An empty string
|
|
1171
|
+
"Change the display name, bio, location or link on your authenticated account's own X profile. This is a PARTIAL update: send only the fields you want to change and everything you omit keeps its current value, so passing just a name will NOT wipe the bio. An empty string CLEARS that field, which is different from omitting it: \"\" blanks the value, an absent key leaves it alone. At least one of name, description, location or url is required, and a request whose only value is an empty string is a valid clear rather than an empty request. It writes a real profile and takes effect immediately with no undo, so read the current values with twitter_user_info first if you may need to restore them. Requires an authenticated session behind your key. Returns ok and updated_fields, which echoes the field names you SENT rather than a diff against the previous profile.",
|
|
1172
1172
|
shape: {
|
|
1173
1173
|
name: z.string().optional().describe(
|
|
1174
1174
|
"Optional. New display name, up to 50 characters. Omit to leave it unchanged.",
|
|
1175
1175
|
),
|
|
1176
1176
|
description: z.string().optional().describe(
|
|
1177
|
-
"Optional. New bio.
|
|
1177
|
+
"Optional. New bio. Send an EMPTY STRING to clear it; OMIT the field to leave it alone. Those are different.",
|
|
1178
1178
|
),
|
|
1179
1179
|
location: z.string().optional().describe(
|
|
1180
|
-
"Optional. New location text. Same rule: an empty string
|
|
1180
|
+
"Optional. New location text. Same rule: an empty string clears it, omitting the field leaves it alone.",
|
|
1181
1181
|
),
|
|
1182
1182
|
url: z.string().optional().describe(
|
|
1183
1183
|
"Optional. New profile link.",
|