Skip to main content
Glama
mysleekdesigns

CrawlForge MCP Server

reddit_search

Read-onlyIdempotent

Search Reddit posts and comments, or read full comment threads by post ID, using archived data without Reddit credentials.

Instructions

Use this to search Reddit posts or comments, or read a full comment thread - reddit.com blocks direct scraping, so this reads the Arctic Shift community archive instead (free, no Reddit credentials). Modes: 'posts' (default) and 'comments' search; 'thread' returns a post plus its nested comment tree by link_id. A subreddit/author-scoped search queries the archive directly. A keyword search across ALL of Reddit finds posts with a site-restricted web search and then reads those posts from the archive, because Arctic Shift can only keyword-search within a scope; results come back as real archive rows, ordered by search relevance. An unscoped COMMENT search discovers posts the same way and then searches each post's comments for the keywords. A scoped comment search Arctic Shift times out on is retried over narrower windows (7d, 3d, 1d) and reports window_applied. Not for reddit.com URLs via scrape or fetch_url (blocked) - use mode:'thread' with the post's link_id. Cost: 5 credits. Example: reddit_search({query: "best mechanical keyboard", subreddit: "MechanicalKeyboards", limit: 10})

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNoWhat to search: posts (default), comments, or thread (full comment tree — requires link_id)
sortNoSort by post date (default desc = newest first)
afterNoOnly content posted after this date — ISO 8601, epoch seconds, or an offset like '7d'
limitNoMax results (default 25; thread mode: max comments returned)
queryNoKeyword search. Posts: matches title+selftext; comments: matches body. Supports "quoted phrases", OR, -exclusion
authorNoLimit to one author (with or without the u/ prefix)
beforeNoOnly content posted before this date — same formats as after
sourceNoBackend: auto routes + falls back (default). web_discovery serves only unscoped keyword searches (web search finds the posts, the archive supplies the rows). reddit_api uses the official Reddit Data API — only when REDDIT_CLIENT_ID/REDDIT_CLIENT_SECRET are set; serves posts/thread, not comment search
link_idNoPost ID (e.g. '1twm1zh' or 't3_1twm1zh') — required for thread mode, optional filter for comments mode
subredditNoLimit to one subreddit (with or without the r/ prefix)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNo
postNothread mode: the post itself
_costNoCost-transparency metadata (D3.5), present when injected into the text copy of the result
countNo
notesNoData-provenance caveats (archive freshness, coverage gaps)
queryNo
authorNo
sourceNoWhich backend served this result — an archive, or web discovery (site-restricted web search hydrated from the archive) for Reddit-wide keyword search
link_idNoPresent in thread mode
resultsNoposts/comments modes
commentsNothread mode: nested comment tree ({...comment, replies:[...]}); collapsed branches appear as {more_count, more_ids}
checkedAtNo
subredditNo
discoveredNoweb_discovery: how many post ids the site-restricted web search surfaced before archive hydration
comment_countNo
fallback_usedNoPresent when the primary archive failed and the fallback served the result
posts_searchedNoweb_discovery comments mode: how many discovered posts had their comments searched before limit was reached
window_appliedNoarctic_shift comments mode: the after-window ("7d"/"3d"/"1d") the search was narrowed to after the full-history search timed out; absent when the caller set after or no narrowing was needed

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed4 schema fields changedv6.0.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedOutput schema / properties / _cost / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / post / anyOf
      Previous value: -[
      -  {
      -    "$ref": "#/properties/results/items/anyOf/0"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "author": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "created_iso": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "created_utc": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "num_comments": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "permalink": {
      +        "description": "Full reddit.com URL of the post",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "score": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "selftext": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "selftext_truncated": {
      +        "type": "boolean"
      +      },
      +      "subreddit": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "title": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / results / items / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "author": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "created_iso": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "created_utc": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "num_comments": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "permalink": {
      -        "description": "Full reddit.com URL of the post",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "score": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "selftext": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "selftext_truncated": {
      -        "type": "boolean"
      -      },
      -      "subreddit": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "title": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "url": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "author": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "body": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "body_truncated": {
      -        "type": "boolean"
      -      },
      -      "created_iso": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "created_utc": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "link_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "parent_id": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "permalink": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "score": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "subreddit": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "author": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "created_iso": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "created_utc": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "num_comments": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "permalink": {
      +        "description": "Full reddit.com URL of the post",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "score": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "selftext": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "selftext_truncated": {
      +        "type": "boolean"
      +      },
      +      "subreddit": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "title": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "url": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "author": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "body": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "body_truncated": {
      +        "type": "boolean"
      +      },
      +      "created_iso": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "created_utc": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "link_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "parent_id": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "permalink": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "score": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "subreddit": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
  2. Changed5 schema fields changedv5.6.6
    • changedInput schema / properties / source / description
      Previous value: -"Backend: auto routes + falls back (default). reddit_api uses the official Reddit Data API — only when REDDIT_CLIENT_ID/REDDIT_CLIENT_SECRET are set; serves posts/thread, not comment search"New value: +"Backend: auto routes + falls back (default). web_discovery serves only unscoped keyword searches (web search finds the posts, the archive supplies the rows). reddit_api uses the official Reddit Data API — only when REDDIT_CLIENT_ID/REDDIT_CLIENT_SECRET are set; serves posts/thread, not comment search"
    • changedInput schema / properties / source / enum
      Previous value: -[
      -  "auto",
      -  "arctic_shift",
      -  "pullpush",
      -  "reddit_api"
      -]New value: +[
      +  "auto",
      +  "arctic_shift",
      +  "pullpush",
      +  "reddit_api",
      +  "web_discovery"
      +]
    • addedOutput schema / properties / discovered
      Added value: +{
      +  "description": "web_discovery: how many post ids the site-restricted web search surfaced before archive hydration",
      +  "type": "number"
      +}
    • addedOutput schema / properties / posts_searched
      Added value: +{
      +  "description": "web_discovery comments mode: how many discovered posts had their comments searched before limit was reached",
      +  "type": "number"
      +}
    • addedOutput schema / properties / window_applied
      Added value: +{
      +  "description": "arctic_shift comments mode: the after-window (\"7d\"/\"3d\"/\"1d\") the search was narrowed to after the full-history search timed out; absent when the caller set after or no narrowing was needed",
      +  "type": "string"
      +}
  3. Addedv5.1.0

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only/idempotent, but the description adds substantial behavioral context: the Arctic Shift archive backend, the web-discovery mechanism for unscoped keyword searches, the 7d/3d/1d retry windows, the window_applied report field, credit cost, and the blocking of direct reddit.com scraping. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core purpose, and every sentence carries useful information. However, it is a single wall of text that could be more scannable with a short mode list or bullets; the length is justified by the tool's complexity.

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 10-parameter tool with multiple modes, the description covers all essential decision points: mode selection, scoping, comment-search discovery, timeout fallback, exclusions, cost, and an example. An output schema exists, so return structure is documented elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 100%, the description adds meaning beyond the schema: it explains mode semantics, why link_id is required for thread mode, the source fallback behavior, and the meaning of window_applied. The example also illustrates valid parameter combinations.

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 opens with a specific verb and resource: 'search Reddit posts or comments, or read a full comment thread'. It names three distinct modes and explicitly contrasts itself with blocked scrape/fetch_url approaches, so an agent can distinguish it from the many sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives direct when-to-use guidance: reddit.com URLs should not be scraped via fetch_url/scrape, and mode:'thread' with a link_id is the prescribed alternative. It also explains scoped vs unscoped behavior and the fallback retry windows, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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/mysleekdesigns/crawlforge-mcp'

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