rfd-mcp
Click on "Install 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., "@rfd-mcpsearch deals for mechanical keyboards"
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.
rfd-mcp
rfd-mcp is a standalone local stdio MCP server for searching and monitoring RedFlagDeals topics.
It has no source or package dependency on the RFD frontend repository. It references RFD only through the cached JSON feed configured with RFD_TOPICS_URL or RFD_TOPICS_FILE. By default it reads the deployed rfd-fyi feed at:
https://github.com/carteakey/rfdThe default data endpoint is:
https://rfd-fyi.pages.dev/topics.jsonFor local development, set RFD_TOPICS_FILE to a JSON file or set RFD_TOPICS_URL to a local Pages/Wrangler endpoint.
Install and build
From this repository root:
npm ci
npm run buildThe compiled server is dist/index.js.
Related MCP server: Shopping Deals MCP Server
Configure an MCP client
For Claude Code:
claude mcp add rfd -- node /absolute/path/to/rfd-mcp/dist/index.jsOr add an entry like this to an MCP client configuration. The environment variables are optional.
{
"mcpServers": {
"rfd": {
"command": "node",
"args": ["/absolute/path/to/rfd-mcp/dist/index.js"],
"env": {
"RFD_TOPICS_URL": "https://rfd-fyi.pages.dev/topics.json",
"RFD_MCP_DATA_DIR": "/absolute/path/to/rfd-mcp-data"
}
}
}
}Tools
search_dealssearches topic titles and retailer names. It supports additional filter chips,/regular expression/filters, retailer filtering, score bounds, the same six sort keys as the frontend, and a result limit.get_dealreturns the complete cached topic record plus the forum and direct-offer links for atopic_id.monitor_searchsaves a search and keeps the latest 500 seen topic IDs.check_monitorschecks one or all saved searches and returns only unseen deals.list_monitorslists saved searches and their last-check state.delete_monitorremoves a saved search.
RFD's cached topic schema does not contain Marketplace-style location, price, or category fields. Those filters are intentionally not exposed; the server uses the fields the RFD scraper actually stores.
Configuration
Variable | Default | Purpose |
|
| Cached topics endpoint |
| unset | Read topics from a local JSON file instead of HTTP |
|
| Base URL for thread links |
|
| In-memory topics cache lifetime |
|
| Directory for monitor state |
|
| Exact monitor state path |
Tests
npm test
npm run buildThe server uses MCP stdio transport, so stdout is reserved for protocol traffic. Diagnostics are returned as tool errors or written by dependencies to stderr.
Available Tools
6 toolscheck_monitorsA
Check saved RFD searches and return only unseen deals
| Name | Required | Description | Default |
|---|---|---|---|
| monitor_name | No | Check one monitor by name, or omit to check all monitors |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the filtering to 'unseen deals' but does not disclose whether the tool modifies state, requires authentication, or has any side effects. This is ambiguous for a 'check' operation.
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 clear sentence, front-loading the purpose with no unnecessary words.
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 tool is simple with one optional parameter, and the schema covers it. The description gives the core behavior but does not explain the return format or any error conditions, which would be helpful given the absence of an output schema. Still, it is fairly complete for its complexity.
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?
The input schema provides 100% coverage for the single optional parameter 'monitor_name', including its behavior. The description adds no additional parameter information, so it meets the baseline.
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 uses a specific verb 'Check' and resource 'saved RFD searches', and clarifies the outcome 'return only unseen deals'. This distinguishes it from sibling tools like search_deals (which searches deals) and monitor_search (which likely creates monitors).
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 its use for checking saved monitors, but does not explicitly state when to use it over alternatives like search_deals or list_monitors. No exclusions or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_monitorB
Delete a saved RFD search monitor
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the monitor to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not state whether deletion is irreversible, what happens if the monitor does not exist, or confirm the outcome, leaving the agent without important context.
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?
Description is a single clear sentence that is appropriately concise and front-loaded, with no wasted words.
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 deletion tool with no annotations or output schema, the description is under-specified. It fails to mention irreversibility, error behavior, or what the tool returns, which an agent would need for safe 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?
The input schema fully documents the single 'name' parameter with a clear description, so the tool description need not add more. Given 100% schema coverage, this meets the baseline of 3.
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 uses a specific verb 'delete' and identifies the resource as 'a saved RFD search monitor', clearly distinguishing it from sibling tools like search_deals and list_monitors.
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 the tool is used for deleting monitors, but provides no explicit guidance on when to use it versus other monitor-related tools, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dealA
Get the complete cached topic data for a RedFlagDeals deal
| Name | Required | Description | Default |
|---|---|---|---|
| topic_id | Yes | RedFlagDeals topic ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add the context that the data is 'cached', which signals potential staleness, but it does not disclose error behavior, authentication, or rate limits. This provides some transparency but leaves significant gaps.
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 communicates the tool's purpose without superfluous words. Every word 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 simple getter with one well-documented parameter, the description adequately conveys the core function and the cached nature of the data. It doesn't describe the return structure, but the phrase 'complete cached topic data' provides reasonable expectation. Given the lack of an output schema, a 4 is warranted rather than a 5.
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?
The schema already documents topic_id as a RedFlagDeals topic ID with 100% coverage, so the description adds no additional parameter semantics. Baseline 3 is appropriate given the schema handles parameter documentation.
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 uses the specific verb 'Get' and clearly identifies the resource as 'the complete cached topic data for a RedFlagDeals deal'. This distinguishes it from sibling tools like search_deals (searching) and monitor tools (monitoring).
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 usage for retrieving a specific deal's data by topic ID, which is distinct from searching or monitoring. However, it does not explicitly state when to use this tool versus alternatives or mention any exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_monitorsB
List all saved RFD search monitors
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It only states the tool lists all saved monitors, but does not mention read-only behavior, output format, ordering, or any side effects. Minimal informational value.
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, concise sentence that front-loads the action and resource. It contains no unnecessary words or repetition.
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?
While the tool is simple with zero parameters, there is no output schema and the description does not explain what the returned list contains (e.g., monitor IDs, names, statuses). With sibling tools present, additional context about the response shape would be valuable.
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?
The tool has zero parameters, so the baseline score is 4. There are no parameter semantics to add, and the description does not need to explain any.
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 'List all saved RFD search monitors' uses a specific verb and resource, clearly distinguishing this from sibling tools like search_deals or delete_monitor. It states exactly what the tool does.
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?
No guidance is provided on when to use this tool versus alternatives like check_monitors or monitor_search. There is no mention of when not to use it or any context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_searchB
Save an RFD search to track newly appearing deals
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for this saved RFD search monitor | |
| sort | No | Sort order used when checking the monitor | score |
| query | No | Text or /regular expression/ filter matched against deal titles and retailer names | |
| dealer | No | Retailer/dealer name filter | |
| filters | No | Additional filters; every filter must match | |
| max_score | No | Maximum community score | |
| min_score | No | Minimum community score |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states the core action without mentioning side effects, return values, prerequisites, or whether the saved search is permanent. This is a significant transparency gap.
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 sentence, front-loaded with the action and purpose, and contains no redundant information. It is maximally concise.
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 7 parameters, no output schema, and no annotations, this one-sentence description lacks essential context about the monitor lifecycle, relationship to sibling tools, and expected return behavior. An agent cannot fully understand the implications of invoking this tool.
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%, and the description adds no parameter-specific details. The schema already explains each parameter, so the description adds little meaning beyond what is structured.
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 uses a specific verb 'Save' and identifies the resource 'an RFD search' along with the purpose 'to track newly appearing deals,' making it clear and distinct from sibling tools like search_deals or check_monitors.
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 the tool is for creating a persistent search monitor, but it does not explicitly state when to use it over search_deals or how it relates to check_monitors/list_monitors. Usage is implied but not explicitly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_dealsA
Search cached RedFlagDeals topics by text, retailer, score, and sort order
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order: score, title, post_time, thread_start, replies, or views | score |
| limit | No | Maximum number of results (default: 20) | |
| query | No | Text or /regular expression/ filter matched against deal titles and retailer names | |
| dealer | No | Retailer/dealer name filter | |
| filters | No | Additional filters; every filter must match, like the RFD frontend's filter chips | |
| max_score | No | Maximum community score | |
| min_score | No | Minimum community score |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the search is over cached data, implying a read-only operation on potentially stale content. However, it does not describe the return format, whether it contacts the live site, or any rate limits. 'Cached' adds some context, but more could be said.
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 sentence that is front-loaded with the action and resource. It is extremely concise with no filler or unnecessary words, while still capturing the essential purpose and key scoping dimensions.
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 7 parameters and no output schema, the description is relatively brief. It does not explain the return structure or mention default behaviors like the limit. However, the schema covers parameter semantics, and the description's clarity about the search domain provides enough context for a basic search tool.
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% with each parameter described, so the baseline is 3. The tool description adds a high-level summary of filters but no new details beyond the schema. It does not compensate for any gaps, but none are needed.
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 identifies a specific action ('Search') on a specific resource ('cached RedFlagDeals topics') and lists the key dimensions (text, retailer, score, sort order). This distinguishes it from siblings like get_deal (single lookup) and monitor tools.
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 usage by stating what it searches, but it does not explicitly say when to use this vs. alternatives, nor does it mention exclusions or prerequisites. Sibling tools like monitor_search exist, but no guidance is given for when to search vs. monitor.
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.
6 tool updates
v1.0.0- First observed
check_monitors - First observed
delete_monitor - First observed
get_deal - First observed
list_monitors - First observed
monitor_search - First observed
search_deals
TDQS
Scored across 6 tools
Each tool has a clear, distinct purpose: searching deals, retrieving a specific deal, creating a monitor, checking monitors, deleting, and listing. No two tools overlap or create ambiguity.
All tool names follow a consistent verb_noun pattern: search_deals, get_deal, monitor_search, check_monitors, delete_monitor, list_monitors. The convention is uniform and predictable.
Six tools is a well-scoped set for the RedFlagDeals domain, covering search, retrieval, and monitor lifecycle without excess or deficiency.
The coverage is solid: search and get for deal access, plus full monitor CRUD (create, read, check, delete) and list. A monitor update operation is absent, but that is a minor gap not essential to core workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Gamedeals MCP — wraps CheapShark API (game deal aggregator, no auth required)
Public MCP server for discovering open jobs. Search, filter, and get application links.
MCP server aggregating developer infrastructure deals, free tiers, and startup programs
MCP server for real-time product search by barcode (EAN, UPC, GTIN) or keyword on ean-search.org
Related MCP Servers
- AlicenseBqualityFmaintenanceA Model Context Protocol server that aggregates and compares deals from multiple sources including Slickdeals, RapidAPI marketplace, and web scraping, enabling users to search, filter, and compare deals through a chat interface.66MIT
- AlicenseBqualityBmaintenanceMCP server for finding, comparing, and ranking the cheapest real offers across eBay, Amazon, Craigslist, OfferUp, and Google Shopping, with tax estimation and exact-model filtering.6MIT
- AlicenseAqualityAmaintenanceMCP server for Groupon that enables searching and browsing local, goods, and travel deals via natural language. No API key required for reading deals.72871MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for pelando.com.br, the Brazilian community deal board. It enables searching and browsing deals, retrieving deal details and comments, and assessing crowd quality verdicts.BSD 2-Clause "Simplified"