Skip to main content
Glama

get_top_posts

Retrieve the highest-rated posts from any Reddit community by specifying a subreddit name, time period, and post limit to analyze trending content and popular discussions.

Instructions

Get top posts from a subreddit

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of posts to fetch
subredditYesName of the subreddit
time_filterNoTime period to filter posts (e.g. 'day', 'week', 'month', 'year', 'all')week

Implementation Reference

  • Primary handler function for the 'get_top_posts' tool. Fetches top posts from Reddit using the client, formats them into summaries, and returns a markdown-formatted response.
    export async function getTopPosts(params: { subreddit: string; time_filter?: string; limit?: number; }) { const { subreddit, time_filter = "week", limit = 10 } = params; const client = getRedditClient(); if (!client) { throw new McpError( ErrorCode.InternalError, "Reddit client not initialized" ); } try { console.log(`[Tool] Getting top posts from r/${subreddit}`); const posts = await client.getTopPosts(subreddit, time_filter, limit); const formattedPosts = posts.map(formatPostInfo); const postSummaries = formattedPosts .map( (post, index) => ` ### ${index + 1}. ${post.title} - Author: u/${post.author} - Score: ${post.stats.score.toLocaleString()} (${( post.stats.upvoteRatio * 100 ).toFixed(1)}% upvoted) - Comments: ${post.stats.comments.toLocaleString()} - Posted: ${post.metadata.posted} - Link: ${post.links.shortLink} ` ) .join("\n"); return { content: [ { type: "text", text: ` # Top Posts from r/${subreddit} (${time_filter}) ${postSummaries} `, }, ], }; } catch (error) { console.error(`[Error] Error getting top posts: ${error}`); throw new McpError( ErrorCode.InternalError, `Failed to fetch top posts: ${error}` ); } }
  • src/index.ts:434-441 (registration)
    MCP server dispatch handler that routes 'get_top_posts' tool calls to the tools.getTopPosts implementation.
    case "get_top_posts": return await tools.getTopPosts( toolParams as { subreddit: string; time_filter?: string; limit?: number; } );
  • Tool registration including name, description, and input schema definition for 'get_top_posts' in the MCP server's listTools handler.
    name: "get_top_posts", description: "Get top posts from a subreddit", inputSchema: { type: "object", properties: { subreddit: { type: "string", description: "Name of the subreddit", }, time_filter: { type: "string", description: "Time period to filter posts (e.g. 'day', 'week', 'month', 'year', 'all')", enum: ["day", "week", "month", "year", "all"], default: "week", }, limit: { type: "integer", description: "Number of posts to fetch", default: 10, }, }, required: ["subreddit"], },
  • Low-level RedditClient method that performs the actual API call to fetch top posts, used by the tool handler.
    async getTopPosts( subreddit: string, timeFilter: string = "week", limit: number = 10 ): Promise<RedditPost[]> { await this.authenticate(); try { const endpoint = subreddit ? `/r/${subreddit}/top.json` : "/top.json"; const response = await this.api.get(endpoint, { params: { t: timeFilter, limit, }, }); return response.data.data.children.map((child: any) => { const post = child.data; return { id: post.id, title: post.title, author: post.author, subreddit: post.subreddit, selftext: post.selftext, url: post.url, score: post.score, upvoteRatio: post.upvote_ratio, numComments: post.num_comments, createdUtc: post.created_utc, over18: post.over_18, spoiler: post.spoiler, edited: !!post.edited, isSelf: post.is_self, linkFlairText: post.link_flair_text, permalink: post.permalink, }; }); } catch (error) { console.error( `[Error] Failed to get top posts for ${subreddit || "home"}:`, error ); throw new Error(`Failed to get top posts for ${subreddit || "home"}`); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/samy-clivolt/reddit-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server