[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-476718b0-732d-44fb-ac03-06eda1ecbfff":3,"$fCY8rfATcymf8r9uHz_6kF2W-4zAKlMHIwJzexhAVbOU":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"476718b0-732d-44fb-ac03-06eda1ecbfff","twitter-automation","通过Rube MCP（Composio）自动化Twitter\u002FX任务：帖子、搜索、用户、书签、列表、媒体。始终首先搜索当前架构的工具。","cat_prod_automation","mod_productivity","sickn33,productivity","---\nname: twitter-automation\ndescription: \"Automate Twitter\u002FX tasks via Rube MCP (Composio): posts, search, users, bookmarks, lists, media. Always search tools first for current schemas.\"\nrisk: critical\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Twitter\u002FX Automation via Rube MCP\n\nAutomate Twitter\u002FX operations through Composio's Twitter toolkit via Rube MCP.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Twitter connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `twitter`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `twitter`\n3. If connection is not ACTIVE, follow the returned auth link to complete Twitter OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Posts\n\n**When to use**: User wants to create, delete, or look up tweets\u002Fposts\n\n**Tool sequence**:\n1. `TWITTER_USER_LOOKUP_ME` - Get authenticated user info [Prerequisite]\n2. `TWITTER_UPLOAD_MEDIA` \u002F `TWITTER_UPLOAD_LARGE_MEDIA` - Upload media [Optional]\n3. `TWITTER_CREATION_OF_A_POST` - Create a new post [Required]\n4. `TWITTER_POST_LOOKUP_BY_POST_ID` - Look up a specific post [Optional]\n5. `TWITTER_POST_DELETE_BY_POST_ID` - Delete a post [Optional]\n\n**Key parameters**:\n- `text`: Post text content (max 280 weighted characters)\n- `media__media_ids`: Array of media ID strings for attachments\n- `reply__in_reply_to_tweet_id`: Tweet ID to reply to\n- `quote_tweet_id`: Tweet ID to quote\n- `id`: Post ID for lookup\u002Fdelete\n\n**Pitfalls**:\n- Post text is limited to 280 weighted characters; some characters count as more than one\n- Posting is NOT idempotent; retrying on timeout will create duplicate posts\n- Media IDs must be numeric strings, not integers\n- UPLOAD_LARGE_MEDIA is for videos\u002FGIFs; UPLOAD_MEDIA for images\n- Always call USER_LOOKUP_ME first to get the authenticated user's ID\n\n### 2. Search Posts\n\n**When to use**: User wants to find tweets matching specific criteria\n\n**Tool sequence**:\n1. `TWITTER_RECENT_SEARCH` - Search recent tweets (last 7 days) [Required]\n2. `TWITTER_FULL_ARCHIVE_SEARCH` - Search full archive (Academic access) [Optional]\n3. `TWITTER_RECENT_SEARCH_COUNTS` - Get tweet count matching query [Optional]\n\n**Key parameters**:\n- `query`: Search query using Twitter search operators\n- `max_results`: Results per page (10-100)\n- `next_token`: Pagination token\n- `start_time`\u002F`end_time`: ISO 8601 time range\n- `tweet__fields`: Comma-separated fields to include\n- `expansions`: Related objects to expand\n\n**Pitfalls**:\n- RECENT_SEARCH covers only the last 7 days; use FULL_ARCHIVE_SEARCH for older tweets\n- FULL_ARCHIVE_SEARCH requires Academic Research or Enterprise access\n- Query operators: `from:username`, `to:username`, `is:retweet`, `has:media`, `-is:retweet`\n- Empty results return `meta.result_count: 0` with no `data` field\n- Rate limits vary by endpoint and access level; check response headers\n\n### 3. Look Up Users\n\n**When to use**: User wants to find or inspect Twitter user profiles\n\n**Tool sequence**:\n1. `TWITTER_USER_LOOKUP_ME` - Get authenticated user [Optional]\n2. `TWITTER_USER_LOOKUP_BY_USERNAME` - Look up by username [Optional]\n3. `TWITTER_USER_LOOKUP_BY_ID` - Look up by user ID [Optional]\n4. `TWITTER_USER_LOOKUP_BY_IDS` - Batch look up multiple users [Optional]\n\n**Key parameters**:\n- `username`: Twitter handle without @ prefix\n- `id`: Numeric user ID string\n- `ids`: Comma-separated user IDs for batch lookup\n- `user__fields`: Fields to return (description, public_metrics, etc.)\n\n**Pitfalls**:\n- Usernames are case-insensitive but must not include the @ prefix\n- User IDs are numeric strings, not integers\n- Suspended or deleted accounts return errors, not empty results\n- LOOKUP_BY_IDS accepts max 100 IDs per request\n\n### 4. Manage Bookmarks\n\n**When to use**: User wants to save, view, or remove bookmarked tweets\n\n**Tool sequence**:\n1. `TWITTER_USER_LOOKUP_ME` - Get authenticated user ID [Prerequisite]\n2. `TWITTER_BOOKMARKS_BY_USER` - List bookmarked posts [Required]\n3. `TWITTER_ADD_POST_TO_BOOKMARKS` - Bookmark a post [Optional]\n4. `TWITTER_REMOVE_A_BOOKMARKED_POST` - Remove bookmark [Optional]\n\n**Key parameters**:\n- `id`: User ID (from USER_LOOKUP_ME) for listing bookmarks\n- `tweet_id`: Tweet ID to bookmark or unbookmark\n- `max_results`: Results per page\n- `pagination_token`: Token for next page\n\n**Pitfalls**:\n- Bookmarks require the authenticated user's ID, not username\n- Bookmarks are private; only the authenticated user can see their own\n- Pagination uses `pagination_token`, not `next_token`\n\n### 5. Manage Lists\n\n**When to use**: User wants to view or manage Twitter lists\n\n**Tool sequence**:\n1. `TWITTER_USER_LOOKUP_ME` - Get authenticated user ID [Prerequisite]\n2. `TWITTER_GET_A_USER_S_OWNED_LISTS` - List owned lists [Optional]\n3. `TWITTER_GET_A_USER_S_LIST_MEMBERSHIPS` - List memberships [Optional]\n4. `TWITTER_GET_A_USER_S_PINNED_LISTS` - Get pinned lists [Optional]\n5. `TWITTER_GET_USER_S_FOLLOWED_LISTS` - Get followed lists [Optional]\n6. `TWITTER_LIST_LOOKUP_BY_LIST_ID` - Get list details [Optional]\n\n**Key parameters**:\n- `id`: User ID for listing owned\u002Fmember\u002Ffollowed lists\n- `list_id`: List ID for specific list lookup\n- `max_results`: Results per page (1-100)\n\n**Pitfalls**:\n- List IDs and User IDs are numeric strings\n- Lists endpoints require the user's numeric ID, not username\n\n### 6. Interact with Posts\n\n**When to use**: User wants to like, unlike, or view liked posts\n\n**Tool sequence**:\n1. `TWITTER_USER_LOOKUP_ME` - Get authenticated user ID [Prerequisite]\n2. `TWITTER_RETURNS_POST_OBJECTS_LIKED_BY_THE_PROVIDED_USER_ID` - Get liked posts [Optional]\n3. `TWITTER_UNLIKE_POST` - Unlike a post [Optional]\n\n**Key parameters**:\n- `id`: User ID for listing liked posts\n- `tweet_id`: Tweet ID to unlike\n\n**Pitfalls**:\n- Like\u002Funlike endpoints require user ID from USER_LOOKUP_ME\n- Liked posts pagination may be slow for users with many likes\n\n## Common Patterns\n\n### Search Query Syntax\n\n**Operators**:\n- `from:username` - Posts by user\n- `to:username` - Replies to user\n- `@username` - Mentions user\n- `#hashtag` - Contains hashtag\n- `\"exact phrase\"` - Exact match\n- `has:media` - Contains media\n- `has:links` - Contains links\n- `is:retweet` \u002F `-is:retweet` - Include\u002Fexclude retweets\n- `is:reply` \u002F `-is:reply` - Include\u002Fexclude replies\n- `lang:en` - Language filter\n\n**Combinators**:\n- Space for AND\n- `OR` for either condition\n- `-` prefix for NOT\n- Parentheses for grouping\n\n### Media Upload Flow\n\n```\n1. Upload media with TWITTER_UPLOAD_MEDIA (images) or TWITTER_UPLOAD_LARGE_MEDIA (video\u002FGIF)\n2. Get media_id from response\n3. Pass media_id as string in media__media_ids array to TWITTER_CREATION_OF_A_POST\n```\n\n## Known Pitfalls\n\n**Character Limits**:\n- Standard posts: 280 weighted characters\n- Some Unicode characters count as more than 1\n- URLs are shortened and count as fixed length (23 characters)\n\n**Rate Limits**:\n- Vary significantly by access tier (Free, Basic, Pro, Enterprise)\n- Free tier: very limited (e.g., 1,500 posts\u002Fmonth)\n- Check `x-rate-limit-remaining` header in responses\n\n**Idempotency**:\n- Post creation is NOT idempotent; duplicate posts will be created on retry\n- Implement deduplication logic for automated posting\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| Create post | TWITTER_CREATION_OF_A_POST | text |\n| Delete post | TWITTER_POST_DELETE_BY_POST_ID | id |\n| Look up post | TWITTER_POST_LOOKUP_BY_POST_ID | id |\n| Recent search | TWITTER_RECENT_SEARCH | query |\n| Archive search | TWITTER_FULL_ARCHIVE_SEARCH | query |\n| Search counts | TWITTER_RECENT_SEARCH_COUNTS | query |\n| My profile | TWITTER_USER_LOOKUP_ME | (none) |\n| User by name | TWITTER_USER_LOOKUP_BY_USERNAME | username |\n| User by ID | TWITTER_USER_LOOKUP_BY_ID | id |\n| Users by IDs | TWITTER_USER_LOOKUP_BY_IDS | ids |\n| Upload media | TWITTER_UPLOAD_MEDIA | media |\n| Upload video | TWITTER_UPLOAD_LARGE_MEDIA | media |\n| List bookmarks | TWITTER_BOOKMARKS_BY_USER | id |\n| Add bookmark | TWITTER_ADD_POST_TO_BOOKMARKS | tweet_id |\n| Remove bookmark | TWITTER_REMOVE_A_BOOKMARKED_POST | tweet_id |\n| Unlike post | TWITTER_UNLIKE_POST | tweet_id |\n| Liked posts | TWITTER_RETURNS_POST_OBJECTS_LIKED_BY_THE_PROVIDED_USER_ID | id |\n| Owned lists | TWITTER_GET_A_USER_S_OWNED_LISTS | id |\n| List memberships | TWITTER_GET_A_USER_S_LIST_MEMBERSHIPS | id |\n| Pinned lists | TWITTER_GET_A_USER_S_PINNED_LISTS | id |\n| Followed lists | TWITTER_GET_USER_S_FOLLOWED_LISTS | id |\n| List details | TWITTER_LIST_LOOKUP_BY_LIST_ID | list_id |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,178,1377,"2026-05-16 13:44:59",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"效率工具","productivity","mdi-lightning-bolt-outline","文档处理、数据分析、自动化工作流",4,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"自动化","automation","mdi-robot-outline","工作流自动化、批处理",3,101,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"293946e7-5d08-4010-a313-3d33e0ea8a3f","1.0.0","twitter-automation.zip",3501,"uploads\u002Fskills\u002F476718b0-732d-44fb-ac03-06eda1ecbfff\u002Ftwitter-automation.zip","1ef5b52e20af3770ff2fd28bcab6e178da36de197dd9bc9ed7b0aeec0dc2d721","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":9298}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]