Skip to main content
Glama

Reddit MCP Tool

server.cpython-310.pyc7.67 kB
o Cl�h�'�@sdUdZddlZddlZddlZddlmZmZmZmZddl m Z ddl m Z ddl mZejejd�e�e�Ze d �Zda eeed <d d �Ze��  d$dedededededef dd��Ze��  d$dededededef dd��Ze��dedefdd��Ze��dedefdd��Ze��d%dededefdd ��Zd!d"�Zed#kr�e�dSdS)&z/Reddit MCP Server implementation using FastMCP.�N)�Any�Dict�List�Optional)�FastMCP�)� RedditConfig)� RedditClient)�levelzreddit-mcp-tool� reddit_clientc Cs`zt��}t|�at�d�WdSty/}zt�dt|����daWYd}~dSd}~ww)z0Initialize the Reddit client with configuration.z8Reddit client initialized successfully in read-only modez$Failed to initialize Reddit client: N) rZfrom_envr r �logger�info� Exception�error�str)�config�e�r�3/Users/lige/Desktop/reddit-mcp/reddit_mcp/server.py�initialize_reddit_clients��r� � relevance�all� subreddit�query�limit�sort� time_filter�returnc �s��tdurdSz�tj||t|d�||d�IdH}|s$d|�d|�d�WSdt|��d |�d|�d �}t|d �D]]\}}||�d |d �d|d�d|d�d|dd�d|d�d|d�d|d�d�7}|dr�t|d�dkr�t|d�dkr�|ddd�dn|d} |d | �d�7}|d7}q7|WSty�} zt�d!|�d"t| ����d!|�d"t| ���WYd} ~ Sd} ~ ww)#a� Search for posts in a specific subreddit Args: subreddit: The name of the subreddit to search in (without r/) query: The search query limit: Number of posts to return (default: 10, max: 100) sort: Sort method - "relevance", "hot", "top", "new", "comments" (default: "relevance") time_filter: Time filter - "all", "day", "week", "month", "year" (default: "all") Returns: Human readable string containing search results N��Error: Reddit client not initialized. Please check your configuration and ensure REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, and REDDIT_USER_AGENT are set.�d)Zsubreddit_namerrrrzNo posts found in r/z for query: '�'�Found z posts in r/�' r�. **�title�** Author: �author� Score: �score� (upvote ratio: � upvote_ratio�.0%�) Comments: � num_comments� Link: � permalink� Subreddit: r/r� �selftextr���...� Content: zError searching posts in r/�: ) r Z search_posts�min�len� enumeraterr rr) rrrrr�posts�result�i�post�previewrrrr�search_reddit_posts$sP� �������� ,  ��r@c �st�tdurdSz�tj|t|d�||d�IdH}|s d|�d�WSdt|��d|�d �}t|d �D]]\}}||�d |d �d |d�d|d�d|dd�d|d�d|d�d|d�d�7}|dr�t|d�dkr�t|d�dkr}|ddd�dn|d}|d|�d�7}|d7}q0|WSty�} zt�d |�d!t| ����d |�d!t| ���WYd} ~ Sd} ~ ww)"a� Search for posts across all of Reddit (site-wide search) Args: query: The search query to search across all Reddit limit: Number of posts to return (default: 10, max: 100) sort: Sort method - "relevance", "hot", "top", "new", "comments" (default: "relevance") time_filter: Time filter - "all", "day", "week", "month", "year" (default: "all") Returns: Human readable string containing search results from across Reddit Nrr )rrrrz)No posts found across Reddit for query: 'r!r"z% posts across all Reddit for query: 'r#rr$r%r&r'r(r)r*r+r,r-r.r/r0r1rr2r3rr4r5r6z&Error searching all Reddit for query 'z': ) r Zsearch_all_redditr8r9r:rr rr) rrrrr;r<r=r>r?rrrr�search_reddit_allasN� �������� ,  ��rA�post_idc�s�tdurdSz^t�|�IdH}d|d�d|d�d|d�d |d d �d |d �d|d�d|d�d|d�d|d�d|d�d�}|�d�rU|d|d�d�7}|drc|d|d�d�7}|WSty�}zt�d|�dt|����d|�dt|���WYd}~Sd}~ww)z� Get detailed information about a specific Reddit post Args: post_id: The Reddit post ID Returns: Human readable string containing detailed post information Nrz**r%z ** Author: r'z Score: r)r*r+r,z ) Comments: r.z Link: r0z Subreddit: r/rz Domain: Zdomainz Locked: �lockedz Stickied: Zstickiedr2Z flair_textzFlair: r3z Content: zError getting post details for r7)r Zget_post_details�getrr rr)rBZ post_detailsr<rrrr�get_reddit_post_details�sF�  ����������  ��rEc�s��tdurdSzJt�|�IdH}d|d�d|d�d|dd �d |d p&d �d |d�d|d�d|d�d�}|drO|d|dkrO|d|d�d�7}|WStyz}zt�d|�dt|����d|�dt|���WYd}~Sd}~ww)z� Get information about a subreddit Args: subreddit: The name of the subreddit (without r/) Returns: Human readable string containing subreddit information Nrz**r/�namez ** Title: r%z Subscribers: Z subscribers�,z Active Users: Zactive_user_countzN/Az NSFW: Zover18z URL: Zurlz Description: Zpublic_descriptionr2� descriptionz Full Description: z#Error getting subreddit info for r/r7)r �get_subreddit_inforr rr)rZsubreddit_infor<rrrrrI�s6�  �� �����  ��rIc�sX�tdurdSz{t�|t|d��IdH}|sd|��WSd|�d�}t|d�D]X\}}||�d|d �d |d �d |d �d|dd�d|d�d|d�d�7}|dr{t|d�dkr{t|d�dkro|ddd�dn|d}|d|�d�7}|d7}q'|WSty�}zt�d|�dt|����d|�dt|���WYd}~Sd}~ww)z� Get hot posts from a subreddit Args: subreddit: The name of the subreddit (without r/) limit: Number of posts to return (default: 10, max: 100) Returns: Human readable string containing hot posts Nrr zNo hot posts found in r/zHot posts from r/z: rr$r%r&r'r(r)r*r+r,r-r.r/r0r2r3r�r5r6zError getting hot posts from r/r7) r Z get_hot_postsr8r:r9rr rr)rrr;r<r=r>r?rrrr�get_hot_reddit_posts�s@�   ������,  ��rKcCst�t��dS)z Entry point for the CLI command.N)r�mcp�runrrrr� run_servers rN�__main__)rrr)r) �__doc__Zjson�logging�os�typingrrrrZfastmcprrrr r � basicConfig�INFO� getLogger�__name__r rL�__annotations__rZtoolr�intr@rArErIrKrNrrrr�<module>sn     ������ �<����� �9)$, �

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

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