get-thread
Extract threads or conversations from social platforms (Farcaster, Twitter, Telegram) using a specific thread ID to access and analyze structured data for LLM workflows.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Social platform (farcaster, twitter, telegram) | |
| threadId | Yes | Thread or conversation ID |
Implementation Reference
- src/mcp/tools/contentTools.ts:307-342 (handler)Registration and handler implementation of the 'get-thread' tool. Defines input schema (platform, threadId), fetches the thread via the platform-specific provider, formats it, and returns as text content. Handles provider not found and errors.server.tool( "get-thread", { platform: z.string().describe("Social platform (farcaster, twitter, telegram)"), threadId: z.string().describe("Thread or conversation ID") }, async ({ platform, threadId }) => { try { const provider = providerRegistry.getProviderForPlatform(platform); if (!provider) { return { content: [{ type: "text", text: `Provider for platform '${platform}' not found or not enabled` }], isError: true }; } const thread = await provider.getThread(threadId); return { content: [{ type: "text", text: formatThread(thread) }] }; } catch (error) { return { content: [{ type: "text", text: `Error fetching ${platform} thread '${threadId}': ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );
- Helper function to format the retrieved thread data (root post and replies) into a structured, readable text string for the tool response.function formatThread(thread: any): string { const rootContent = thread.content; const replies = thread.replies; const root = ` Original Post by @${rootContent.authorUsername} (${rootContent.authorName}): "${rootContent.text}" - Posted: ${new Date(rootContent.createdAt).toLocaleString()} - Engagement: ${rootContent.likes || 0} likes, ${rootContent.reposts || 0} reposts, ${rootContent.replies || 0} replies - ID: ${rootContent.id} `; let repliesText = ''; if (replies.length > 0) { repliesText = '\nReplies:\n\n' + replies.map((reply: SocialContent, index: number) => { return `[${index + 1}] @${reply.authorUsername} (${reply.authorName}): ${reply.text} - Posted: ${new Date(reply.createdAt).toLocaleString()} - Engagement: ${reply.likes || 0} likes, ${reply.reposts || 0} reposts, ${reply.replies || 0} replies - ID: ${reply.id}`; }).join('\n\n'); } else { repliesText = '\nNo replies to this post.'; } return `Thread on ${thread.platform}:\n${root}${repliesText}`; }
- src/mcp/server.ts:26-26 (registration)Calls registerContentTools which registers the 'get-thread' tool among others on the MCP server.registerContentTools(server, providerRegistry);