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.
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 bylist_categories. The default limit is 10 and the maximum is 100.search_posts(query, category?, after?, limit?)searches WordPress article text and titles.categoryaccepts a slug fromlist_categories,afteraccepts an ISO calendar date (YYYY-MM-DD) and excludes older publications, andlimitdefaults 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 underpostsand 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 underfailures. 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.bankis an institution text signal,stateis a two-letter USPS state or District of Columbia code (case-insensitive), andamount_minis 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_minis 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
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。