reddit-leads-mcp
Allows searching Reddit for posts, scoring them for buying intent, and fetching full threads with comments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@reddit-leads-mcpsearch r/SaaS and r/startups for churn tool requests, score, show top 3 threads"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
reddit-leads-mcp
An MCP server that turns Claude (or any MCP client) into a Reddit lead-finding agent: search for buying-intent conversations, score them against your product, and read full threads before drafting a reply.
Extracted from the scoring pipeline behind RedProwler.
Tools
Tool | What it does |
| Search recent posts by query, optionally restricted to subreddits |
| Two-phase lead scoring: lexical pre-score on every post, Claude semantic scoring for posts that clear the threshold |
| Fetch a post with its top comments for full context |
A typical session: "search r/SaaS and r/startups for people asking about churn tools, score them against my product, and show me the top three threads."
Related MCP server: systemprompt-mcp-reddit
Why two-phase scoring
Sending every scraped post to an LLM is slow and expensive, and most posts are obviously irrelevant. The pre-score is a lexical pass (keyword coverage plus buying-intent phrasing like "looking for", "alternative to", "willing to pay") capped at 0.5. Only posts above an escalation threshold get a Claude call, which returns a 0 to 1 semantic score behind strict JSON extraction and range clamping. If the API is down or returns something unparseable, the post keeps its pre-score instead of failing the run. In RedProwler this design cut scoring costs roughly in half with no measurable recall loss.
Without an ANTHROPIC_API_KEY, the server still works: everything is ranked by pre-score alone.
Setup
Requires Node 18+.
Claude Desktop / Claude Code
{
"mcpServers": {
"reddit-leads": {
"command": "npx",
"args": ["-y", "github:thetomtoro/reddit-leads-mcp"],
"env": {
"REDDIT_CLIENT_ID": "...",
"REDDIT_CLIENT_SECRET": "...",
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
}Reddit credentials come from a free "script" app at reddit.com/prefs/apps; the server uses the client-credentials grant against oauth.reddit.com. Without them it falls back to the public JSON endpoints, which Reddit rejects from many networks these days, so credentials are recommended. ANTHROPIC_API_KEY is optional; omit it to run lexical-only scoring.
From source
git clone https://github.com/thetomtoro/reddit-leads-mcp
cd reddit-leads-mcp
npm install
npm run build
npm testPoint your MCP client at node dist/index.js over stdio.
Notes
Read-only. OAuth when credentials are set, public JSON otherwise, always with a descriptive User-Agent. Be polite with request volume; this is for finding conversations worth joining, not mass scraping.
REDDIT_LEADS_MODELoverrides the scoring model (default: Claude Haiku).Scoring internals live in
src/scoring.tsand are covered by unit tests that run fully offline.
License
MIT
Available Tools
3 toolsfetch_threadA
Fetch a Reddit post with its top comments, for reading the full conversation before drafting a reply.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full reddit.com post URL | |
| max_comments | No | Max top-level comments (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It discloses that the tool fetches the post and its top comments, and implies a read-only operation. It does not mention return format or potential limits (e.g., max_comments), but the schema covers the limit and the description provides the core behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the action and purpose. Every word contributes value; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, 1 required) and lack of output schema, the description plus schema provide sufficient context. It covers what the tool does and when to use it. It does not detail the exact response structure, but for a read-only fetch with clear parameters, that is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already describes 'url' and 'max_comments' (including default and range). The description adds minimal semantic value beyond reinforcing that 'top comments' are included, but it does not clarify parameter syntax or edge cases beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Fetch'), the resource ('a Reddit post with its top comments'), and the use case ('before drafting a reply'). It is easily distinguished from sibling tools 'search_reddit' and 'score_leads' since it retrieves a specific known thread rather than searching or scoring.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use the tool: 'before drafting a reply' (i.e., when you need the full conversation for a known post). It does not explicitly list exclusions or mention alternatives, but the sibling context makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_leadsA
Score Reddit posts as sales leads for a product using two-phase scoring: a lexical pre-score on every post, then Claude semantic scoring for posts above the escalation threshold (requires ANTHROPIC_API_KEY; falls back to the pre-score without it). Returns posts sorted by final score.
| Name | Required | Description | Default |
|---|---|---|---|
| posts | Yes | Posts to score, as returned by search_reddit | |
| keywords | Yes | Keywords a relevant post would contain, e.g. ['leads', 'outreach', 'reddit'] | |
| product_description | Yes | What the product does and who it is for, 1 to 3 sentences | |
| escalation_threshold | No | Pre-score needed before a post is sent to Claude (default: 0.2) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and excels: it discloses the two-phase scoring (lexical pre-score then Claude semantic), the ANTHROPIC_API_KEY requirement, the fallback behavior without the key, and the final sort order. This is rich behavioral context beyond basic safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose, then details the process and key constraints. Every clause adds value—no filler. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main flow, the API dependency, fallback, and sort order. However, with no output schema, it does not specify the exact format of the final score (e.g., field name, range), leaving a small gap. For a tool of this complexity, this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context about the escalation threshold and two-phase process, but all parameter meanings are already well documented in the schema (e.g., 'Pre-score needed before a post is sent to Claude'). The description does not add significant new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific function: 'Score Reddit posts as sales leads for a product' with a detailed two-phase process and return behavior. This verb+resource combination clearly distinguishes it from siblings like search_reddit and fetch_thread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use by stating it scores posts 'as sales leads' and the schema's posts parameter notes they come 'as returned by search_reddit', giving clear context. However, it lacks explicit exclusions or direct alternatives, so it doesn't fully meet the 5-level bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_redditA
Search Reddit for recent posts matching a query, optionally restricted to specific subreddits. Returns post title, body, url, and engagement stats.
| Name | Required | Description | Default |
|---|---|---|---|
| time | No | Recency window (default: week) | |
| limit | No | Max posts to return (default: 25) | |
| query | Yes | Search query, e.g. 'lead generation tool' | |
| subreddits | No | Subreddit names without the r/ prefix, e.g. ['SaaS', 'startups'] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return payload (title, body, url, engagement stats) and the optional subreddit restriction, but does not mention sorting, pagination, or rate limits. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the primary action and optional restriction, the second states the return fields. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with comprehensive parameter documentation, the description provides sufficient context: it covers the purpose, optional scope, and return fields. No output schema exists, but stating the returned fields is adequate for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions including defaults, enums, and examples. The description adds no parameter semantics beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool searches Reddit for recent posts matching a query, optionally restricted to subreddits. This specific verb+resource combination distinguishes it from sibling tools like fetch_thread, which retrieves a specific thread.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this when you need to discover recent Reddit posts. However, no explicit guidance is provided about when to prefer this over alternatives like fetch_thread, and no exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
fetch_thread - First observed
score_leads - First observed
search_reddit
TDQS
Scored across 3 tools
Each tool has a clear, distinct role: search_reddit discovers posts, score_leads evaluates them, and fetch_thread retrieves detailed context. There is no overlap in their functions.
All tool names follow a consistent verb_noun pattern: search_reddit, score_leads, fetch_thread. The convention is uniform and predictable.
Three tools is well-scoped for a focused lead-generation workflow. Each tool earns its place and together they form a compact, purposeful set.
The workflow from discovery to scoring to detailed inspection is fully covered. There are no obvious missing operations for the stated purpose of finding and qualifying Reddit leads.
Maintenance
Related MCP Connectors
Find high-intent Reddit conversations and manage lead workflows from MCP-compatible AI agents.
Agentic Reddit/HN buying-signal detection for Claude Code, Cursor, and Windsurf via MCP.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Connect Claude or any MCP client to Thread Otter, a GTM agent for founders. Free tools with no key: find_buyer_threads (give it a website URL and get recent Reddit threads where that product's buyers are asking for it, report in ~3 minutes), reddit_demand_board (weekly demand across 40 communities with thread receipts), and subreddit_rules (promotion posture for 2,000+ profiled subreddits). With an API key: read your buying-intent mentions across Reddit, X, LinkedIn, and Bluesky, check your pipeline, and propose posts and reply drafts in your voice. Propose-only by design: nothing sends without your approval flow. Keys at threadotter.com/connect.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants like Claude to browse and analyze Reddit content, including searching subreddits, retrieving post details with comments, and viewing trending posts.9MIT
- AlicenseNot gradedqualityDmaintenanceA specialized MCP server that enables AI agents to interact with Reddit, including reading posts, creating content, and managing subreddit configurations.5 npm10Apache 2.0
- AlicenseAqualityBmaintenanceMCP server to dynamically load Claude Code skills into AI agents543 npm15MIT
- AlicenseNot gradedqualityAmaintenanceA local-first MCP server that helps Claude Code prioritize your work by searching across your tools like GitHub and Slack.7 npmMIT