comment-scraper-mcp
Allows Claude to list, read, and search Reddit threads exported as JSON from the Comment Scraper browser extension. Provides tools to browse exported threads newest-first, read threads as numbered Markdown with optional score filtering, search comments across exports by keyword, and retrieve a comment with its parent and child replies.
comment-scraper-mcp
Ask Claude about the Reddit and Hacker News threads you exported with Comment Scraper, without pasting them in.
This is a small MCP server. It reads the JSON files the Comment Scraper browser extension saves to your Downloads folder and gives Claude (or any MCP client) four tools to list, read and search them. Comments keep the same numbers as the extension's Markdown export, like [c12], so when Claude quotes a comment you can find it in the file.
It runs on your computer, only reads files, and makes no network requests.
Before you start
Install the Comment Scraper extension from the Chrome Web Store.
Export a thread and pick JSON, one row per comment or JSON, replies nested. CSV and Markdown files aren't read.
Have Node.js 20 or newer.
Related MCP server: claude-kb
Install
Claude Code
claude mcp add comment-scraper -- npx -y comment-scraper-mcpClaude Desktop: open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"comment-scraper": {
"command": "npx",
"args": ["-y", "comment-scraper-mcp"]
}
}
}Restart Claude Desktop afterwards. Other MCP clients (Cursor, Windsurf and so on) take the same command: npx -y comment-scraper-mcp.
As a Claude Code plugin: the plugin folder bundles the server, pinned to a release, with a skill that tells Claude how to cite comments. This repository doubles as a plugin marketplace:
claude plugin install comment-scraper --marketplace supertj/comment-scraper-mcpUse the plugin or claude mcp add, not both, or Claude sees every tool twice.
As a Hermes Agent plugin: the same folder works in Hermes Agent. The install steps are in the plugin README.
Pi: this package is also a Pi package. Installing it gives Pi the server and the same skill the Claude plugin uses:
pi install npm:comment-scraper-mcpStart a new Pi session and ask about your exports. Pi starts the server from the installed package, so nothing is downloaded at run time, and /mcp shows whether it connected. You need Pi 0.99 or newer, the first version with MCP support. To read another folder, set COMMENT_SCRAPER_DIRS in the shell you start Pi from. If you already added comment-scraper-mcp to Pi's mcp.json by hand, remove that entry, unless it's named comment-scraper, in which case Pi uses it in place of the package's.
Where it looks
By default it reads your Downloads folder and the folders directly inside it, so moving exports into a project folder there is fine. To read somewhere else, pass one or more folders:
claude mcp add comment-scraper -- npx -y comment-scraper-mcp --dir ~/Research/redditor set COMMENT_SCRAPER_DIRS (folders separated by :, or ; on Windows). Files are recognised by their content, so renaming them is fine. If you export the same thread twice, the newest export is used.
Tools
Tool | What it does |
| Your exported threads, newest first, with how many comments were fetched and how many the site reports |
| A thread as numbered Markdown, 200 comments at a time, optionally only comments above a score |
| Comments containing all of your words, across every export or one thread, highest score first |
| One comment with the replies it answers and the replies to it |
Things to ask
"List my exported threads."
"Read the CRM thread and group the complaints about pricing. Cite comment numbers."
"Search my exports for 'switched from' and summarise what people moved to."
"Show c41 in context."
Privacy
The server reads JSON files in the folders above and nothing else. It doesn't write, move or delete files, and it doesn't connect to the internet. What you ask Claude, and the comments Claude reads through these tools, go to Anthropic or whichever model provider your client uses, under their terms. Exports from the extension don't contain usernames.
License
MIT
Available Tools
4 toolsget_commentGet a comment in contextARead-only
Returns one comment by its [cN] number with the comments it replies to (up to the top) and its direct replies.
| Name | Required | Description | Default |
|---|---|---|---|
| thread | Yes | Thread id from list_threads, or words from its title | |
| comment | Yes | Comment number, e.g. "c12" or "12" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-destructive local read (readOnlyHint=true, openWorldHint=false), so the safety profile is covered. The description adds genuinely new behavioral information: the response is not just the comment but its ancestor chain 'up to the top' and its direct replies, which tells the agent what context comes back. It omits any note on failure modes when a comment number doesn't exist, keeping it short of a 5.
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?
A single sentence with zero filler, front-loaded with the operation and immediately qualified by the returned scope. Every clause earns its place.
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?
With only two required, fully described parameters and no output schema, the description's job is to convey what the call yields — which it does via the ancestor/replies scope. It is nearly complete, lacking only a hint about behavior when the comment id is invalid.
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 both parameters (thread, comment) are already fully documented, including the accepted comment-number forms in the schema itself. The description's '[cN]' notation restates what the schema already says and adds no new meaning. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource — 'Returns one comment by its [cN] number' — and goes on to define the exact scope of what comes back (ancestor chain plus direct replies). That scope detail implicitly separates it from search_comments and read_thread, though neither sibling is named outright.
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?
There is no when-to-use guidance and no mention of alternatives. The phrase 'by its [cN] number' faintly implies you already need the identifier (so search_comments would come first), but that routing is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threadsList exported threadsARead-only
Lists the Reddit and Hacker News threads the user exported with Comment Scraper, newest first, with comment counts. Call this first to get a thread id.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Only threads whose title contains this text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), yet the description still adds behavior: results are ordered newest first and include comment counts, and it reveals that the primary output is a thread id used by other tools. This is useful context beyond structured fields, though nothing is said about pagination or result limits.
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?
Two short sentences, zero filler. The resource and ordering lead, and the actionable workflow instruction follows. Every clause earns its place.
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 zero-required-param listing tool with annotations covering safety and no output schema, the description supplies what an agent needs: what is listed, the ordering, the presence of comment counts, and the next step. Nothing essential is missing.
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% for the single optional `query` parameter, so the schema already documents that it filters by title substring. The description adds nothing to parameter meaning, which is the expected baseline when the schema does the work.
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 names a specific verb (Lists) and resource (Reddit and Hacker News threads exported via Comment Scraper), and adds scope details: newest first, with comment counts. It also implicitly distinguishes itself from read_thread by stating it returns thread ids to be used with that sibling.
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?
"Call this first to get a thread id" gives explicit sequencing guidance relative to read_thread, so an agent knows when this tool is the entry point. It stops short of naming exclusions or comparing against search_comments/get_comment, but the workflow positioning is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_threadRead a threadARead-only
Returns a thread's post and comments as numbered Markdown ([c12] reply to [c3] (score 41, 3d ago)). Long threads come in pages: call again with the offset given at the end. Cite comments by their [cN] number.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Comments per page, default 200 | |
| offset | No | Skip this many comments (for the next page) | |
| thread | Yes | Thread id from list_threads, or words from its title | |
| min_score | No | Only comments with at least this score (hidden scores are left out) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnlyHint=true, openWorldHint=false), and the description adds behavior they cannot: the exact rendered return format including score and relative age, the pagination continuation rule, and the citation convention. It does not cover failure modes (unknown thread id, fuzzy title resolution) or rate limits, so it is strong but not complete.
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?
Three tight sentences, front-loaded with what is returned, then the paging rule, then the citation requirement. No filler and no restatement of the tool name or title.
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?
There is no output schema, so the description carries the full burden of describing the return value, and it does so concretely with a format sample plus the paging loop. Only error handling and the relationship to sibling tools are left implicit.
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 goes beyond it by explaining the offset parameter as a continuation token ('call again with the offset given at the end'), which tells the agent how limit/offset interact across calls; min_score and the title-matching behavior of 'thread' remain schema-only.
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?
States a specific verb and resource — returns a thread's post plus its comments — and specifies the exact output shape (numbered Markdown with [cN] references). It is clearly distinct from get_comment and search_comments in effect, though it never names those siblings to make the boundary explicit.
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?
Gives real operational guidance for pagination ('call again with the offset given at the end') and for citing comments, which tells the agent how to use the result. It stops short of saying when to choose read_thread over search_comments or get_comment, so the alternative-selection half of the guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_commentsSearch commentsARead-only
Finds comments containing all of the given words across every exported thread (or one thread). Returns each match with its thread, [cN] number and score.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches, default 30 | |
| query | Yes | Words to look for; a comment must contain all of them (case-insensitive) | |
| thread | No | Limit to one thread: id or words from its title |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral detail by disclosing the shape of each match (thread, [cN] number, score), which reveals results are ranked, but says nothing about pagination behavior, result ordering rules, or cost/limits.
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?
Two tight sentences with the search scope front-loaded and the return shape second; every clause carries information and there is no 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?
For a three-parameter read-only search with no output schema, the description covers scope, matching semantics, and return contents, which is close to sufficient. Only minor gaps remain, such as ordering of scored matches and whether limit truncates silently.
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 limit, query and thread are all documented in the schema, which sets the baseline at 3. The description restates the AND-matching semantics of query and the single-thread option without adding format, syntax, or ranking-weight details 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?
States a specific verb+resource (finds comments) plus the scope of the search (all exported threads, or one) and the return payload (thread, [cN] number, score). It is distinguishable from get_comment by its cross-thread search scope, but it never names a sibling or explicitly contrasts with them.
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 phrase 'across every exported thread (or one thread)' and the thread parameter hint at when to narrow the search, implying usage rather than stating it. There is no explicit when-to-use/when-not guidance and no alternative tool is named, so the agent must infer the routing.
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.
4 tool updates
v0.1.2- First observed
get_comment - First observed
list_threads - First observed
read_thread - First observed
search_comments
TDQS
Scored across 4 tools
Each tool targets a distinct operation: list_threads enumerates threads, read_thread returns a full paginated thread, search_comments does keyword search, and get_comment fetches one comment with its reply context. The boundaries between read_thread and get_comment are clear (whole-thread view vs. single-comment drill-down).
All four names follow the verb_noun snake_case pattern (list_threads, read_thread, search_comments, get_comment). The only nit is singular 'thread' in read_thread vs. plural elsewhere, but the convention is otherwise uniform and predictable.
Four tools is well-scoped for a read-only browser over exported threads. Each tool earns its place covering enumerate, view, search, and drill-down, with no redundant or filler tools.
The read-only lifecycle (list, read, search, get) is fully covered for browsing scraped content, so agents won't hit dead ends. Minor gaps exist, such as no filtering/sorting on thread lists or search by author/date, but these are workarounds rather than blockers.
Maintenance
Related MCP Connectors
Read-only Reddit search API for AI agents: posts, comments, comment trees, subreddit rules.
Reddit posts, comments, keyword search and historical archives as tools. Runs on Apify.
Reddit data for AI agents: posts, comments, subreddits, search. Community + sentiment research.
Search and read public Reddit and X posts, comments, threads, profiles and Articles; run monitors.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to search and retrieve past coding-tool conversations across Claude Code, Claude Desktop, Codex, and Cursor through a local, read-only index.2MIT
- AlicenseNot gradedqualityAmaintenanceEnables Claude to search locally indexed exported chat history and project docs, retrieving full messages and conversation IDs via full-text search.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to full-text search, list, and read your exported ChatGPT and Claude conversations from a local conversations.json file, running locally with read-only file access and no network requests. Supports both official export formats with automatic detection.MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and retrieving ChatGPT and Claude conversation exports locally, allowing assistants to fetch handoff context and continue conversations through read-only MCP tools.MIT