Skip to main content
Glama
jordanburke

reddit-mcp-server

get_subreddit_info

Fetch detailed information about any Reddit community, including subscriber count, description, and activity metrics, to analyze subreddit characteristics.

Instructions

Get information about a subreddit

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
subreddit_nameYesName of the subreddit

Implementation Reference

  • Primary handler implementation for the 'get_subreddit_info' tool: validates input with Zod schema, fetches data via RedditClient, formats with formatSubredditInfo, and returns comprehensive markdown summary.
    server.addTool({
      name: "get_subreddit_info",
      description: "Get detailed information about a subreddit including description, stats, and community analysis",
      parameters: z.object({
        subreddit_name: z.string().describe("The subreddit name (without r/ prefix)"),
      }),
      execute: async (args) => {
        const client = getRedditClient()
        if (!client) {
          throw new Error("Reddit client not initialized")
        }
    
        const subreddit = await client.getSubredditInfo(args.subreddit_name)
        const formattedSubreddit = formatSubredditInfo(subreddit)
    
        return `# Subreddit Information: r/${formattedSubreddit.name}
    
    ## Overview
    - Name: r/${formattedSubreddit.name}
    - Title: ${formattedSubreddit.title}
    - Subscribers: ${formattedSubreddit.stats.subscribers.toLocaleString()}
    - Active Users: ${
          typeof formattedSubreddit.stats.activeUsers === "number"
            ? formattedSubreddit.stats.activeUsers.toLocaleString()
            : formattedSubreddit.stats.activeUsers
        }
    
    ## Description
    ${formattedSubreddit.description.short}
    
    ## Detailed Description
    ${formattedSubreddit.description.full}
    
    ## Metadata
    - Created: ${formattedSubreddit.metadata.created}
    - Flags: ${formattedSubreddit.metadata.flags.join(", ")}
    
    ## Links
    - Subreddit: ${formattedSubreddit.links.subreddit}
    - Wiki: ${formattedSubreddit.links.wiki}
    
    ## Community Analysis
    - ${formattedSubreddit.communityAnalysis.replace(/\n  - /g, "\n- ")}
    
    ## Engagement Tips
    - ${formattedSubreddit.engagementTips.replace(/\n  - /g, "\n- ")}`
      },
    })
  • RedditClient method that authenticates and fetches raw subreddit data from Reddit's API endpoint /r/{subredditName}/about.json, parsing into RedditSubreddit type.
    async getSubredditInfo(subredditName: string): Promise<RedditSubreddit> {
      await this.authenticate()
      try {
        const response = await this.makeRequest(`/r/${subredditName}/about.json`)
        if (!response.ok) {
          throw new Error(`HTTP ${response.status}`)
        }
    
        const json = (await response.json()) as RedditApiSubredditResponse
        const data = json.data
    
        return {
          displayName: data.display_name,
          title: data.title,
          description: data.description || "",
          publicDescription: data.public_description || "",
          subscribers: data.subscribers,
          activeUserCount: data.active_user_count ?? undefined,
          createdUtc: data.created_utc,
          over18: data.over18,
          subredditType: data.subreddit_type,
          url: data.url,
        }
      } catch {
        // Failed to get subreddit info
        throw new Error(`Failed to get subreddit info for ${subredditName}`)
      }
    }
  • Helper function that processes raw RedditSubreddit data into a rich formatted structure including stats, descriptions, metadata, links, community analysis, and engagement tips.
    export function formatSubredditInfo(subreddit: RedditSubreddit): FormattedSubredditInfo {
      const flags: string[] = []
      if (subreddit.over18) flags.push("NSFW")
      if (subreddit.subredditType) flags.push(`Type: ${subreddit.subredditType}`)
    
      const ageDays = (Date.now() / 1000 - subreddit.createdUtc) / (24 * 3600)
    
      return {
        name: subreddit.displayName,
        title: subreddit.title,
        stats: {
          subscribers: subreddit.subscribers,
          activeUsers: subreddit.activeUserCount !== undefined ? subreddit.activeUserCount : "Unknown",
        },
        description: {
          short: subreddit.publicDescription,
          full:
            subreddit.description.length > 300 ? subreddit.description.substring(0, 297) + "..." : subreddit.description,
        },
        metadata: {
          created: formatTimestamp(subreddit.createdUtc),
          flags: flags.length ? flags : ["None"],
        },
        links: {
          subreddit: `https://reddit.com${subreddit.url}`,
          wiki: `https://reddit.com/r/${subreddit.displayName}/wiki`,
        },
        communityAnalysis: analyzeSubredditHealth(subreddit.subscribers, subreddit.activeUserCount, ageDays),
        engagementTips: getSubredditEngagementTips(subreddit),
      }
    }

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

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