rfd-mcp
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.
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.