Skip to main content
Glama
supertj

comment-scraper-mcp

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

  1. Install the Comment Scraper extension from the Chrome Web Store.

  2. Export a thread and pick JSON, one row per comment or JSON, replies nested. CSV and Markdown files aren't read.

  3. Have Node.js 20 or newer.

Related MCP server: claude-kb

Install

Claude Code

claude mcp add comment-scraper -- npx -y comment-scraper-mcp

Claude 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-mcp

Use 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-mcp

Start 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/reddit

or 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

list_threads

Your exported threads, newest first, with how many comments were fetched and how many the site reports

read_thread

A thread as numbered Markdown, 200 comments at a time, optionally only comments above a score

search_comments

Comments containing all of your words, across every export or one thread, highest score first

get_comment

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 tools
get_commentGet a comment in contextA
Read-only

Returns one comment by its [cN] number with the comments it replies to (up to the top) and its direct replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadYesThread id from list_threads, or words from its title
commentYesComment number, e.g. "c12" or "12"

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 threadsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOnly threads whose title contains this text

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 threadA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoComments per page, default 200
offsetNoSkip this many comments (for the next page)
threadYesThread id from list_threads, or words from its title
min_scoreNoOnly comments with at least this score (hidden scores are left out)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/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 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.

Purpose4/5

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.

Usage Guidelines3/5

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 commentsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matches, default 30
queryYesWords to look for; a comment must contain all of them (case-insensitive)
threadNoLimit to one thread: id or words from its title

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.1.2
    • First observedget_comment
    • First observedlist_threads
    • First observedread_thread
    • First observedsearch_comments

TDQS

A4.1/5.0

Scored across 4 tools

Disambiguation5/5

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).

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Claude to search locally indexed exported chat history and project docs, retrieving full messages and conversation IDs via full-text search.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching and retrieving ChatGPT and Claude conversation exports locally, allowing assistants to fetch handoff context and continue conversations through read-only MCP tools.
    MIT