Skip to main content
Glama
thetomtoro

reddit-leads-mcp

by thetomtoro

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_reddit

Search recent posts by query, optionally restricted to subreddits

score_leads

Two-phase lead scoring: lexical pre-score on every post, Claude semantic scoring for posts that clear the threshold

fetch_thread

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 test

Point 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_MODEL overrides the scoring model (default: Claude Haiku).

  • Scoring internals live in src/scoring.ts and are covered by unit tests that run fully offline.

License

MIT

Available Tools

3 tools
fetch_threadA

Fetch a Reddit post with its top comments, for reading the full conversation before drafting a reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFull reddit.com post URL
max_commentsNoMax top-level comments (default: 20)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
postsYesPosts to score, as returned by search_reddit
keywordsYesKeywords a relevant post would contain, e.g. ['leads', 'outreach', 'reddit']
product_descriptionYesWhat the product does and who it is for, 1 to 3 sentences
escalation_thresholdNoPre-score needed before a post is sent to Claude (default: 0.2)

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeNoRecency window (default: week)
limitNoMax posts to return (default: 25)
queryYesSearch query, e.g. 'lead generation tool'
subredditsNoSubreddit names without the r/ prefix, e.g. ['SaaS', 'startups']

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv0.1.0
    • First observedfetch_thread
    • First observedscore_leads
    • First observedsearch_reddit

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: search_reddit, score_leads, fetch_thread. The convention is uniform and predictable.

Tool Count5/5

Three tools is well-scoped for a focused lead-generation workflow. Each tool earns its place and together they form a compact, purposeful set.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers