doctor-of-credit-mcp

doctor-of-credit-mcp

An MCP server that lets AI clients search and retrieve Doctor of Credit articles, categories, and deals via flexible tools, interpreting article content at request time.

Category
访问服务器

README

doctor-of-credit-mcp

People researching bank bonuses, credit-card offers, and other deals published by Doctor of Credit must currently browse and interpret individual articles themselves. The source material contains valuable details: eligibility restrictions, expiration dates, direct-deposit requirements, geographic limits, and update history. But those details are expressed as prose and can change over time. AI clients need a dependable way to discover and retrieve that source material without losing provenance or presenting inferred details as facts.

Run locally

Requires Node.js 22 or newer.

npm install
npm run build
npm start

The process communicates using MCP over stdio. Configure an MCP client to run node /absolute/path/to/doctor-of-credit-mcp/dist/cli.js.

The server currently provides:

  • list_categories() retrieves every category from Doctor of Credit's WordPress API.
  • get_post(url_or_id) retrieves a post by its positive integer WordPress ID or HTTPS Doctor of Credit article URL.
  • get_recent_posts(category?, limit?) retrieves recent posts from WordPress, optionally filtered by a category slug returned by list_categories. The default limit is 10 and the maximum is 100.
  • search_posts(query, category?, after?, limit?) searches WordPress article text and titles. category accepts a slug from list_categories, after accepts an ISO calendar date (YYYY-MM-DD) and excludes older publications, and limit defaults to 10 with a maximum of 100.
  • compare_offers(post_ids[]) retrieves between 1 and 10 unique posts by positive integer WordPress ID. It returns each article independently under posts and does not merge or infer offer terms. If some posts cannot be retrieved, successful articles remain available and each failure is reported with its requested ID under failures. If every retrieval fails, the tool returns an actionable MCP error without comparison data.
  • get_big_deals(limit?) retrieves likely notable deal articles. The default limit is 10 and the maximum is 25.
  • find_bank_bonuses(bank?, state?, amount_min?) retrieves up to 10 likely bank-bonus source articles. bank is an institution text signal, state is a two-letter USPS state or District of Columbia code (case-insensitive), and amount_min is a positive whole-dollar threshold up to $1,000,000.
  • find_credit_card_offers(issuer?, card?, bonus_min?) retrieves up to 10 likely credit-card source articles. Issuer and card name are source-text signals; bonus_min is a positive integer up to 1,000,000 compared within each source-mentioned unit.

Post tools return source-backed fields under source: the stable ID, original URL, title, publication and modification timestamps, and cleaned article text. Interpretive fields live separately under derived. The server sets derived.outdatedWarning when the article has not been modified for more than 180 days. This conservative threshold uses the only dependable freshness signal available in the source contract—the modification timestamp— and avoids inferring an offer-specific expiration date from prose. It is a prompt to verify the source, not a claim that the offer is valid or expired.

get_recent_posts falls back to the global or category-specific RSS feed when WordPress is unavailable or returns invalid data. RSS items use the same post shape, but RSS does not publish a modification timestamp, so modifiedAt is null for those results. Their outdated warning conservatively uses the publication timestamp instead. The server does not persist retrieved content or metadata.

search_posts uses WordPress search directly so relevance and all filters are applied by the source. It does not fall back to the recent-post RSS feed, because that feed cannot provide a complete or relevance-ranked search result.

get_big_deals applies a deterministic candidate policy to the 100 most recent posts (using the existing RSS fallback when WordPress is unavailable). An article qualifies when its cleaned title or text contains a dollar amount of at least $500 or an amount of at least 50,000 immediately followed by “points” or “miles.” Candidates are ordered by: number of qualifying signal types, largest dollar mention, largest points/miles mention, publication date, then stable post ID, all descending. The matched maxima and qualifying-signal count appear under derived.selectionSignals; they are text-selection signals, not assertions about an offer's value, availability, or validity. Every candidate otherwise retains the shared source and warning contract.

find_bank_bonuses searches up to 100 WordPress results using the supplied institution, the state's full name, and “bank bonus” as search terms. It then keeps only articles whose cleaned title/text contains both “bonus” and a banking term (bank, banking, checking, savings, credit union, or deposit account). Optional filters must also appear in the source text: the institution is matched case-insensitively, geography matches the full state name or uppercase postal code, and the largest dollar mention must meet amount_min. Results are ordered by publication date and stable ID, descending, then capped at 10. Match booleans and the largest dollar mention live under derived.bankBonusSignals; they identify candidate evidence only and do not assert geographic eligibility, direct-deposit requirements, availability, offer value, or current validity. Search failures return errors rather than falling back to an incomplete recent-post feed.

find_credit_card_offers searches up to 100 WordPress results using the supplied issuer, card name, and “credit card offer” as search terms. It keeps only articles whose cleaned title/text contains both a credit-card term and an offer signal (bonus, offer, welcome, or sign-up). Optional issuer and card filters must also occur in the source text. bonus_min matches when either the largest dollar mention or the largest points/miles mention meets the threshold in its own source unit; dollars and rewards are never converted or valued against one another. Results are ordered by publication date and stable ID, descending, then capped at 10. All match booleans and amount mentions live under derived.creditCardOfferSignals; they are candidate evidence only and do not assert eligibility, bonus value, restrictions, availability, or current validity. Search failures return errors rather than incomplete RSS results.

Upstream HTTP, network, and response-validation failures are returned as actionable MCP tool errors rather than empty or fabricated results.

Development

npm run typecheck
npm test

Tests exercise behavior through an MCP client. Most use an in-memory MCP transport with controlled upstream HTTP fixtures; a smoke test launches the compiled stdio entry point.

Planned tools

I’d next add higher-level research tools: Those higher-level tools would search and collect likely articles, but let the connected model interpret restrictions, expiration dates, direct-deposit rules, and similar prose. Results should always include: Original article URL Publication and modification dates Cleaned article text An explicit distinction between source data and AI-derived fields Warnings when an offer may be outdated Internally, it can use the WordPress endpoint first, RSS as a fallback, and a small SQLite cache. No separate public REST service is necessary—the MCP server itself becomes the interface. A TypeScript implementation using the official MCP SDK would make a clean local server that works over stdio, with optional remote HTTP support later.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选