mirror of
https://github.com/openswarm-ai/openswarm.git
synced 2026-08-25 14:02:22 +02:00
181 lines
6.0 KiB
Python
181 lines
6.0 KiB
Python
"""MCP tool surface for X (Twitter): the full set of things a logged-in human can do.
|
|
|
|
Reads (timeline/search/tweet/user/bookmarks/notifications) and writes (tweet with
|
|
reply+quote, delete, like, retweet, bookmark, follow, DM). A tweet `target` may be a
|
|
status URL, a numeric id, or a t-prefixed id; the read tools return ids you pass back.
|
|
"""
|
|
|
|
OBJ = "object"
|
|
|
|
TOOLS = [
|
|
{
|
|
"name": "x_whoami",
|
|
"description": "Confirm the logged-in X session and return your handle + profile. Use first to verify the session is live.",
|
|
"inputSchema": {"type": OBJ, "properties": {}},
|
|
},
|
|
{
|
|
"name": "x_timeline",
|
|
"description": "Read your home timeline (the For You or Following feed).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"kind": {"type": "string", "enum": ["foryou", "following"], "default": "foryou"},
|
|
"count": {"type": "integer", "default": 20, "description": "1-100"},
|
|
"cursor": {"type": "string", "description": "Pagination cursor from a previous call."},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"name": "x_user_tweets",
|
|
"description": "Read a user's recent tweets and replies by @handle.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"username": {"type": "string", "description": "Handle, with or without @."},
|
|
"count": {"type": "integer", "default": 20},
|
|
"cursor": {"type": "string"},
|
|
},
|
|
"required": ["username"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_get_tweet",
|
|
"description": "Get a tweet plus its replies. target is a status URL, a numeric id, or a t-prefixed id.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"target": {"type": "string"},
|
|
"replies_limit": {"type": "integer", "default": 30},
|
|
},
|
|
"required": ["target"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_search",
|
|
"description": "Search tweets. product: top, latest, people, or media.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"query": {"type": "string"},
|
|
"product": {"type": "string", "enum": ["top", "latest", "people", "media"], "default": "top"},
|
|
"count": {"type": "integer", "default": 20},
|
|
"cursor": {"type": "string"},
|
|
},
|
|
"required": ["query"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_get_user",
|
|
"description": "Get a user's profile (bio, follower/following/tweet counts) by @handle.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {"username": {"type": "string"}},
|
|
"required": ["username"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_bookmarks",
|
|
"description": "List your bookmarked tweets.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"count": {"type": "integer", "default": 20},
|
|
"cursor": {"type": "string"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"name": "x_notifications",
|
|
"description": "Read your notifications (mentions, likes, follows, replies).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"count": {"type": "integer", "default": 20},
|
|
"cursor": {"type": "string"},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"name": "x_tweet",
|
|
"description": "Post a tweet. Set reply_to to reply to a tweet, or quote_id to quote one (both accept a URL/id).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"text": {"type": "string"},
|
|
"reply_to": {"type": "string", "description": "Tweet URL/id to reply to."},
|
|
"quote_id": {"type": "string", "description": "Tweet URL/id to quote."},
|
|
},
|
|
"required": ["text"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_delete_tweet",
|
|
"description": "Delete one of your own tweets by URL/id.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {"target": {"type": "string"}},
|
|
"required": ["target"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_like",
|
|
"description": "Like a tweet (or unlike with unlike=true).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"target": {"type": "string"},
|
|
"unlike": {"type": "boolean", "default": False},
|
|
},
|
|
"required": ["target"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_retweet",
|
|
"description": "Retweet a tweet (or undo with undo=true).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"target": {"type": "string"},
|
|
"undo": {"type": "boolean", "default": False},
|
|
},
|
|
"required": ["target"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_bookmark",
|
|
"description": "Bookmark a tweet (or remove with remove=true).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"target": {"type": "string"},
|
|
"remove": {"type": "boolean", "default": False},
|
|
},
|
|
"required": ["target"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_follow",
|
|
"description": "Follow a user by @handle (or unfollow with unfollow=true).",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"username": {"type": "string"},
|
|
"unfollow": {"type": "boolean", "default": False},
|
|
},
|
|
"required": ["username"],
|
|
},
|
|
},
|
|
{
|
|
"name": "x_send_dm",
|
|
"description": "Send a direct message. recipient is a @handle or a numeric user id.",
|
|
"inputSchema": {
|
|
"type": OBJ,
|
|
"properties": {
|
|
"recipient": {"type": "string"},
|
|
"text": {"type": "string"},
|
|
},
|
|
"required": ["recipient", "text"],
|
|
},
|
|
},
|
|
]
|