{
  "$comment": "Static catalog of Xpoz MCP tools. The authoritative source is the live tools/list response from the MCP server at https://mcp.xpoz.ai/mcp (OAuth-authenticated). This file mirrors that surface for agents and scanners that cannot complete the OAuth handshake.",
  "mcp_version": "2025-03-26",
  "server_name": "Xpoz MCP Server",
  "endpoint": "https://mcp.xpoz.ai/mcp",
  "transport": "streamable-http",
  "auth": {
    "type": "oauth2",
    "authorization_server": "https://www.xpoz.ai/.well-known/oauth-authorization-server",
    "scopes_supported": ["read", "write"],
    "dynamic_registration_supported": true
  },
  "global_arguments": {
    "userPrompt": {
      "type": "string",
      "description": "The user's original natural-language question. Always pass this. Xpoz uses it for query optimization, intelligent caching, field selection, and to disambiguate username variations. Omitting it returns less relevant fields and slower responses."
    }
  },
  "tools": [
    {
      "name": "getTwitterPostsByKeywords",
      "description": "Search Twitter/X posts by free-text keywords. Returns posts ranked by relevance and recency. Supports optional date range, language, geo, and author filters. Use for brand monitoring, topic tracking, sentiment analysis, and competitor mentions.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1, "description": "Keyword(s) or phrase to match in post text" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000, "description": "Max posts to return (default 100)" },
          "startDate": { "type": "string", "format": "date-time", "description": "ISO 8601 lower bound (inclusive)" },
          "endDate": { "type": "string", "format": "date-time", "description": "ISO 8601 upper bound (inclusive)" },
          "lang": { "type": "string", "description": "BCP-47 language code, e.g. 'en'" },
          "country": { "type": "string", "description": "ISO 3166-1 alpha-2 country code, e.g. 'US'" },
          "cursor": { "type": "string", "description": "Pagination cursor returned by a prior call" },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getTwitterPostsByAuthor",
      "description": "Get Twitter/X posts authored by a specific user. Identify the user by author_id or author_username. Supports date filtering and pagination.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "author_id": { "type": "string", "description": "Numeric Twitter user ID" },
          "author_username": { "type": "string", "description": "Twitter handle without @" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "startDate": { "type": "string", "format": "date-time" },
          "endDate": { "type": "string", "format": "date-time" },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "anyOf": [{ "required": ["author_id"] }, { "required": ["author_username"] }]
      }
    },
    {
      "name": "getTwitterPostsByIds",
      "description": "Fetch one or more specific Twitter/X posts by their numeric IDs. Use to hydrate post content and metrics from IDs collected elsewhere.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": { "type": "array", "items": { "type": "string" }, "minItems": 1, "maxItems": 100, "description": "Twitter post IDs" },
          "userPrompt": { "type": "string" }
        },
        "required": ["ids"]
      }
    },
    {
      "name": "getTwitterUser",
      "description": "Get a Twitter/X user profile by user ID or username. Returns name, bio, followers, following, verification, location, and profile media URLs.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": { "type": "string", "description": "Numeric Twitter user ID" },
          "username": { "type": "string", "description": "Twitter handle without @" },
          "userPrompt": { "type": "string" }
        },
        "anyOf": [{ "required": ["id"] }, { "required": ["username"] }]
      }
    },
    {
      "name": "getTwitterUserConnections",
      "description": "Get a Twitter/X user's connections — followers, following, or mutuals. Supports pagination for large social graphs.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "id": { "type": "string" },
          "type": { "type": "string", "enum": ["followers", "following", "mutuals"] },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["type"],
        "anyOf": [{ "required": ["id"] }, { "required": ["username"] }]
      }
    },
    {
      "name": "getTwitterUsersByKeywords",
      "description": "Find Twitter/X users whose name, bio, or username matches a keyword query. Returns ranked profiles. Use for influencer or competitor discovery.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getTwitterPostComments",
      "description": "Get reply posts that respond to a specific Twitter/X post. Use for thread context, reaction analysis, or sentiment toward a post.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string", "description": "ID of the Twitter post being replied to" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "getTwitterPostQuotes",
      "description": "Get quote-tweets that quote a specific Twitter/X post. Use to measure amplification and find users who shared an opinion about the post.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "getTwitterPostRetweets",
      "description": "Get the retweet records for a specific Twitter/X post. Use to measure raw amplification and identify amplifying accounts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "getTwitterPostInteractingUsers",
      "description": "Get the union of users who interacted with a specific Twitter/X post — likers, repliers, retweeters, and quoters. Use for engagement audience analysis.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "searchTwitterUsers",
      "description": "Lightweight Twitter/X user search optimized for autocomplete-style lookups by partial username or display name.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "countTweets",
      "description": "Count Twitter/X posts matching a query, optionally scoped to author and/or date range. Cheap aggregate without returning post bodies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string" },
          "author_id": { "type": "string" },
          "author_username": { "type": "string" },
          "startDate": { "type": "string", "format": "date-time" },
          "endDate": { "type": "string", "format": "date-time" },
          "userPrompt": { "type": "string" }
        }
      }
    },

    {
      "name": "getInstagramPostsByKeywords",
      "description": "Search Instagram posts (feed posts and Reels) by free-text keywords matched against captions and hashtags. Use for brand monitoring on Instagram.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "startDate": { "type": "string", "format": "date-time" },
          "endDate": { "type": "string", "format": "date-time" },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getInstagramPostsByUser",
      "description": "Get Instagram posts (feed and Reels) by a specific user. Returns captions, media URLs, and engagement counts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "userId": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "anyOf": [{ "required": ["username"] }, { "required": ["userId"] }]
      }
    },
    {
      "name": "getInstagramPostsByIds",
      "description": "Fetch specific Instagram posts by their IDs. Use to hydrate IDs gathered from other queries or external sources.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": { "type": "array", "items": { "type": "string" }, "minItems": 1, "maxItems": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["ids"]
      }
    },
    {
      "name": "getInstagramUser",
      "description": "Get an Instagram user profile by username or user ID. Returns bio, followers, following, post count, and verification status.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "userId": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "anyOf": [{ "required": ["username"] }, { "required": ["userId"] }]
      }
    },
    {
      "name": "getInstagramUserConnections",
      "description": "Get an Instagram user's followers or following list. Use for audience analysis and influencer overlap.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "type": { "type": "string", "enum": ["followers", "following"] },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["username", "type"]
      }
    },
    {
      "name": "getInstagramUsersByKeywords",
      "description": "Find Instagram users whose handle, name, or bio matches a keyword query. Use for creator and competitor discovery.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getInstagramCommentsByPostId",
      "description": "Get comments on a specific Instagram post. Use for sentiment analysis or audience reaction on a single post.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "getInstagramPostInteractingUsers",
      "description": "Get users who liked or commented on a specific Instagram post. Use for engagement audience analysis.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "type": { "type": "string", "enum": ["likers", "commenters"], "default": "likers" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "searchInstagramUsers",
      "description": "Lightweight Instagram user search by partial handle or display name. Optimized for autocomplete-style lookups.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },

    {
      "name": "getTiktokPostsByKeywords",
      "description": "Search TikTok videos by keywords matched against captions and hashtags. Returns ranked posts with view, like, and comment counts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "startDate": { "type": "string", "format": "date-time" },
          "endDate": { "type": "string", "format": "date-time" },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getTiktokPostsByUser",
      "description": "Get TikTok videos posted by a specific creator. Returns captions, hashtags, sound info, and engagement metrics.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["username"]
      }
    },
    {
      "name": "getTiktokPostsByIds",
      "description": "Fetch specific TikTok videos by their IDs. Use to hydrate IDs from other sources.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": { "type": "array", "items": { "type": "string" }, "minItems": 1, "maxItems": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["ids"]
      }
    },
    {
      "name": "getTiktokCommentsByPostId",
      "description": "Get comments on a specific TikTok video. Use for sentiment analysis on a single piece of content.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "getTiktokUser",
      "description": "Get a TikTok creator profile by username. Returns nickname, bio, followers, following, likes, and verification status.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["username"]
      }
    },
    {
      "name": "getTiktokUsersByKeywords",
      "description": "Find TikTok creators whose handle, nickname, or bio matches a keyword query. Use for creator and competitor discovery.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "searchTiktokUsers",
      "description": "Lightweight TikTok creator search by partial handle or display name. Optimized for autocomplete-style lookups.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },

    {
      "name": "getRedditPostsByKeywords",
      "description": "Search Reddit posts by keywords across all subreddits. Returns ranked posts with title, body, score, and comment count. Supports subreddit and date filters.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "subreddit": { "type": "string", "description": "Optional subreddit name without 'r/'" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "startDate": { "type": "string", "format": "date-time" },
          "endDate": { "type": "string", "format": "date-time" },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getRedditCommentsByKeywords",
      "description": "Search Reddit comments by keywords. Returns matching comments with thread context. Use for finding niche conversations and buying signals.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "subreddit": { "type": "string" },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "startDate": { "type": "string", "format": "date-time" },
          "endDate": { "type": "string", "format": "date-time" },
          "cursor": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getRedditPostWithCommentsById",
      "description": "Get a single Reddit post and its full comment tree by post ID. Use for deep context on a thread.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "postId": { "type": "string" },
          "commentLimit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "userPrompt": { "type": "string" }
        },
        "required": ["postId"]
      }
    },
    {
      "name": "getRedditSubredditWithPostsByName",
      "description": "Get a subreddit's metadata together with its recent posts by subreddit name. Use for community-scoped monitoring.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": { "type": "string", "description": "Subreddit name without 'r/'" },
          "postLimit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "sort": { "type": "string", "enum": ["new", "hot", "top", "rising"], "default": "new" },
          "userPrompt": { "type": "string" }
        },
        "required": ["name"]
      }
    },
    {
      "name": "getRedditSubredditsByKeywords",
      "description": "Find subreddits whose name or description matches a keyword query. Use for community discovery before monitoring.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "getRedditUser",
      "description": "Get a Reddit user profile by username. Returns karma, account age, and recent activity summary.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "username": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["username"]
      }
    },
    {
      "name": "getRedditUsersByKeywords",
      "description": "Find Reddit users whose username or about-text matches a keyword query.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 1000 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "searchRedditSubreddits",
      "description": "Lightweight subreddit search by partial name. Optimized for autocomplete-style lookups.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "searchRedditUsers",
      "description": "Lightweight Reddit user search by partial username. Optimized for autocomplete-style lookups.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string", "minLength": 1 },
          "limit": { "type": "integer", "minimum": 1, "maximum": 100 },
          "userPrompt": { "type": "string" }
        },
        "required": ["query"]
      }
    },

    {
      "name": "addTrackedItems",
      "description": "Subscribe Xpoz to ongoing monitoring of one or more search queries, users, or subreddits. New matching content is indexed continuously and queryable in real time.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "platform": { "type": "string", "enum": ["twitter", "instagram", "tiktok", "reddit"] },
                "kind": { "type": "string", "enum": ["query", "user", "subreddit"] },
                "value": { "type": "string", "description": "Query string, username, or subreddit name" }
              },
              "required": ["platform", "kind", "value"]
            }
          },
          "userPrompt": { "type": "string" }
        },
        "required": ["items"]
      }
    },
    {
      "name": "getTrackedItems",
      "description": "List the tracked items currently being monitored on the caller's Xpoz account, with their platforms and last-update timestamps.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "platform": { "type": "string", "enum": ["twitter", "instagram", "tiktok", "reddit"] },
          "userPrompt": { "type": "string" }
        }
      }
    },
    {
      "name": "removeTrackedItems",
      "description": "Stop monitoring one or more previously-added tracked items by their IDs. New content for these items will no longer be indexed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ids": { "type": "array", "items": { "type": "string" }, "minItems": 1 },
          "userPrompt": { "type": "string" }
        },
        "required": ["ids"]
      }
    },

    {
      "name": "checkOperationStatus",
      "description": "Poll the status of a long-running Xpoz operation by its operation ID. Returns one of pending, running, completed, failed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "operationId": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["operationId"]
      }
    },
    {
      "name": "cancelOperation",
      "description": "Cancel a still-running Xpoz operation by its operation ID. No-op if the operation already completed or failed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "operationId": { "type": "string" },
          "userPrompt": { "type": "string" }
        },
        "required": ["operationId"]
      }
    },
    {
      "name": "checkAccessKeyStatus",
      "description": "Verify whether the caller's API key or OAuth session is valid and what plan it belongs to. Use as a connectivity smoke test.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "userPrompt": { "type": "string" }
        }
      }
    },
    {
      "name": "getUserAccessKey",
      "description": "Return the caller's current API key (or OAuth-derived equivalent) and its plan limits. Requires an authenticated session.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "userPrompt": { "type": "string" }
        }
      }
    }
  ]
}
