twitter_user_search
Search for Twitter/X user profiles to gather open-source intelligence for security research and data analysis.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Twitter/X username to lookup |
Implementation Reference
- src/tools/social-scavenger.ts:13-40 (handler)The actual implementation of the Twitter user search logic using a Nitter RSS feed.
async getTwitterProfile(username: string): Promise<any> { try { // Using a reliable public nitter instance const response = await fetch(`https://nitter.net/${username}/rss`); if (!response.ok) throw new Error("Profile not found or instance down"); const text = await response.text(); // Basic regex extraction from RSS for bio/details const titleMatch = text.match(/<title>(.*?)<\/title>/i); const descMatch = text.match(/<description>(.*?)<\/description>/i); return { platform: "Twitter/X", username, title: titleMatch ? titleMatch[1] : "", bio: descMatch ? descMatch[1] : "No bio found or private account", url: `https://twitter.com/${username}`, nitterUrl: `https://nitter.net/${username}` }; } catch (error) { return { platform: "Twitter/X", username, error: true, message: (error as Error).message }; } } // Basic Instagram check (limited due to IG's strict blocking) async getInstagramProfile(username: string): Promise<any> { try { const url = `https://www.instagram.com/${username}/`; - src/index.ts:732-740 (registration)Registration of the twitter_user_search tool in the MCP server.
server.tool( "twitter_user_search", { username: z.string().describe("Twitter/X username to lookup") }, async ({ username }) => { const result = await scavengerClient.getTwitterProfile(username); return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }], }; }