search-content
Search content across social platforms (Farcaster, Twitter, Telegram) using a query and retrieve relevant results. Specify the platform and limit responses for focused data extraction.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| platform | Yes | Social platform (farcaster, twitter, telegram) | |
| query | Yes | Search query |
Implementation Reference
- src/mcp/tools/contentTools.ts:15-59 (handler)Handler function that executes the 'search-content' tool logic: logs the call, retrieves the platform provider from registry, checks availability, calls provider.searchContent, formats results with formatSearchResults, and returns formatted text or error.async ({ platform, query, limit = 10 }) => { try { console.error(`search-content tool called for platform: ${platform}, query: ${query}`); const provider = providerRegistry.getProviderForPlatform(platform); if (!provider) { console.error(`Provider for platform '${platform}' not found or not enabled`); return { content: [{ type: "text", text: `Provider for platform '${platform}' not found or not enabled` }], isError: true }; } // Check if the provider is available console.error(`Checking if provider ${provider.name} is available`); const isAvailable = await provider.isAvailable(); if (!isAvailable) { console.error(`Provider ${provider.name} is not available`); return { content: [{ type: "text", text: `Provider for platform '${platform}' is not available` }], isError: true }; } console.error(`Using provider: ${provider.name} for search`); const results = await provider.searchContent(query, { limit }); console.error(`Search results count: ${results.length}`); return { content: [{ type: "text", text: formatSearchResults(results, query, platform) }] }; } catch (error) { console.error(`Error in search-content tool:`, error); return { content: [{ type: "text", text: `Error searching ${platform} for '${query}': ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } }
- src/mcp/tools/contentTools.ts:11-14 (schema)Zod input schema for the 'search-content' tool defining parameters: platform (string), query (string), limit (optional number).platform: z.string().describe("Social platform (farcaster, twitter, telegram)"), query: z.string().describe("Search query"), limit: z.number().optional().describe("Maximum number of results to return") },
- src/mcp/tools/contentTools.ts:9-60 (registration)Registers the 'search-content' tool on the MCP server with its name, input schema, and handler function."search-content", { platform: z.string().describe("Social platform (farcaster, twitter, telegram)"), query: z.string().describe("Search query"), limit: z.number().optional().describe("Maximum number of results to return") }, async ({ platform, query, limit = 10 }) => { try { console.error(`search-content tool called for platform: ${platform}, query: ${query}`); const provider = providerRegistry.getProviderForPlatform(platform); if (!provider) { console.error(`Provider for platform '${platform}' not found or not enabled`); return { content: [{ type: "text", text: `Provider for platform '${platform}' not found or not enabled` }], isError: true }; } // Check if the provider is available console.error(`Checking if provider ${provider.name} is available`); const isAvailable = await provider.isAvailable(); if (!isAvailable) { console.error(`Provider ${provider.name} is not available`); return { content: [{ type: "text", text: `Provider for platform '${platform}' is not available` }], isError: true }; } console.error(`Using provider: ${provider.name} for search`); const results = await provider.searchContent(query, { limit }); console.error(`Search results count: ${results.length}`); return { content: [{ type: "text", text: formatSearchResults(results, query, platform) }] }; } catch (error) { console.error(`Error in search-content tool:`, error); return { content: [{ type: "text", text: `Error searching ${platform} for '${query}': ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );
- Helper function used by the handler to format the search results into a readable text string for the LLM.function formatSearchResults(results: SocialContent[], query: string, platform: string): string { if (results.length === 0) { return `No results found for query: "${query}" on ${platform}`; } const formattedResults = results.map((result, index) => { return `[${index + 1}] @${result.authorUsername} (${result.authorName}): ${result.text} - Posted: ${new Date(result.createdAt).toLocaleString()} - Engagement: ${result.likes || 0} likes, ${result.reposts || 0} reposts, ${result.replies || 0} replies - ID: ${result.id}`; }).join('\n\n'); return `Search Results for "${query}" on ${platform}:\n\n${formattedResults}`; }
- src/mcp/server.ts:26-26 (registration)Top-level call to registerContentTools during MCP server setup, which includes registration of the 'search-content' tool.registerContentTools(server, providerRegistry);