Skip to main content
Glama

get_post_comments

Fetch and structure comments and replies for any Reddit post using its post_id. Optionally sort results by 'best,' 'top,' or 'new' for organized viewing.

Instructions

💬 Get comments for a Reddit post 🎯 What it does: Fetches comments and replies for any Reddit post 📝 Required: post_id (Reddit post ID, found in post URLs) ⚙️ Optional: sort ('best', 'top', 'new') 💡 Examples: • Get comments: {"post_id": "1n1nlse"} • Best comments: {"post_id": "1n1nlse", "sort": "best"} • New comments: {"post_id": "1n1nlse", "sort": "new"} 🔍 Output: Formatted comment tree with author, score, timestamp, and nested replies

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
post_idYesReddit post ID to get comments for
sortNoSort order (default: best)best

Implementation Reference

  • MCP tool handler for 'get_post_comments': extracts params, applies smart defaults, calls redditAPI.getPostComments, parses and validates response, formats comment tree with formatDataList and formatRedditComment, returns MCP-formatted text response.
    createToolHandler(async (params: z.infer<typeof SimplePostCommentsSchema>) => { const { post_id, sort } = params; // 🧠 Smart defaults for missing parameters const smartDefaults = getSmartDefaults(params, 'comments'); const finalParams = { ...smartDefaults, post_id, sort: sort || smartDefaults.sort }; const result = await redditAPI.getPostComments(post_id, finalParams.limit, finalParams.sort); if (!result.success) { return createErrorResponse("Error getting post comments", result.error); } const data = result.data; if (!data || !Array.isArray(data) || data.length === 0) { return createErrorResponse("No comments found for this post"); } // The first element contains the post, the second contains comments const commentsData = data[1]; if (!commentsData || !commentsData.data || !commentsData.data.children) { return createErrorResponse("No comments found for this post"); } const comments = commentsData.data.children.map((child: any) => child.data); if (comments.length === 0) { return createSuccessResponse("No comments found for this post"); } const summary = `💬 Found ${comments.length} comments for post ${post_id} (sorted by ${sort})`; // ✅ DRY: Sử dụng formatDataList helper const commentDetails = formatDataList(comments, formatRedditComment, COMMENT_PREVIEW_LIMIT, "comments"); const resultText = `${summary}\n\n${commentDetails}`; return createSuccessResponse(resultText); })
  • Zod input schema defining required 'post_id' string and optional 'sort' enum (best, top, new) with defaults and descriptions.
    export const SimplePostCommentsSchema = z.object({ post_id: z.string().describe("Reddit post ID to get comments for"), sort: z.enum(["best", "top", "new"]).default("best").describe("Sort order (default: best)") });
  • src/index.ts:603-653 (registration)
    MCP server.tool registration for 'get_post_comments' including name, detailed description, input schema reference, and wrapped handler function.
    server.tool( "get_post_comments", "💬 Get comments for a Reddit post\n" + "🎯 What it does: Fetches comments and replies for any Reddit post\n" + "📝 Required: post_id (Reddit post ID, found in post URLs)\n" + "⚙️ Optional: sort ('best', 'top', 'new')\n" + "💡 Examples:\n" + " • Get comments: {\"post_id\": \"1n1nlse\"}\n" + " • Best comments: {\"post_id\": \"1n1nlse\", \"sort\": \"best\"}\n" + " • New comments: {\"post_id\": \"1n1nlse\", \"sort\": \"new\"}\n" + "🔍 Output: Formatted comment tree with author, score, timestamp, and nested replies", SimplePostCommentsSchema.shape, createToolHandler(async (params: z.infer<typeof SimplePostCommentsSchema>) => { const { post_id, sort } = params; // 🧠 Smart defaults for missing parameters const smartDefaults = getSmartDefaults(params, 'comments'); const finalParams = { ...smartDefaults, post_id, sort: sort || smartDefaults.sort }; const result = await redditAPI.getPostComments(post_id, finalParams.limit, finalParams.sort); if (!result.success) { return createErrorResponse("Error getting post comments", result.error); } const data = result.data; if (!data || !Array.isArray(data) || data.length === 0) { return createErrorResponse("No comments found for this post"); } // The first element contains the post, the second contains comments const commentsData = data[1]; if (!commentsData || !commentsData.data || !commentsData.data.children) { return createErrorResponse("No comments found for this post"); } const comments = commentsData.data.children.map((child: any) => child.data); if (comments.length === 0) { return createSuccessResponse("No comments found for this post"); } const summary = `💬 Found ${comments.length} comments for post ${post_id} (sorted by ${sort})`; // ✅ DRY: Sử dụng formatDataList helper const commentDetails = formatDataList(comments, formatRedditComment, COMMENT_PREVIEW_LIMIT, "comments"); const resultText = `${summary}\n\n${commentDetails}`; return createSuccessResponse(resultText); }) );
  • Supporting method in RedditAPIService: constructs and executes authenticated GET request to Reddit API endpoint `/comments/{postId}.json` with limit/sort params, handles OAuth token, rate limits, errors, returns structured ApiCallResult.
    async getPostComments( postId: string, limit: number = 25, sort: "best" | "top" | "new" | "controversial" | "old" | "qa" = "best", ): Promise<ApiCallResult> { const params: Record<string, any> = { limit, sort }; return this.makeRequest<Array<{ data: { children: Array<{ data: RedditComment }> } }>>( `/comments/${postId}.json`, params, ); }

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/tandat8503/mcp-reddit'

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