Unofficial UWM Mortgage Reader

Unofficial UWM Mortgage Reader

A read-only MCP server for mortgage tracking that connects to UWM's portal via a browser adapter, providing summary, payment history, escrow, statements, and extra payment calculations without initiating financial activity.

Category
访问服务器

README

Unofficial UWM Mortgage Reader

A community-contributed, read-only Model Context Protocol (MCP) server for mortgage tracking with an authenticated UWM browser adapter.

Independent community project: This software is not made, sponsored, supported, endorsed, or operated by UWM. It does not speak for UWM. “UWM” identifies the mortgage portal the adapter can read; it is not the publisher of this software.

Private alpha: live validation found no stable same-origin JSON response for the required views. The adapter therefore uses narrowly scoped browser extraction on only the authenticated views observed during owner validation. It does not invent or call undocumented borrower endpoints.

Safety properties

  • Read-only by design.
  • No make_payment, ACH, transfer, autopay enrollment, or payoff-request tool.
  • No passwords, SSNs, loan numbers, cookies, HAR files, or statements belong in git.
  • Mortgage calculations run locally and never initiate financial activity.

Tools

  • mortgage_connection_status
  • mortgage_start_login
  • mortgage_get_summary
  • mortgage_get_payment_history
  • mortgage_get_escrow
  • mortgage_list_statements
  • mortgage_calculate_extra_payment

Run the mock server

UWM_MCP_MODE=mock node src/server.js

MCP stdio messages are newline-delimited JSON-RPC. The server supports modern 2026-07-28 discovery/per-request metadata and legacy initialize-based clients for compatibility.

Run from a validated snapshot

Copy config/snapshot.example.json to a private location, replace it with data captured from your own UWM session, then:

UWM_MCP_MODE=snapshot \
UWM_MCP_SNAPSHOT=/absolute/private/path/uwm.snapshot.json \
node src/server.js

Run the live UWM adapter

The live adapter keeps one ephemeral headed browser open for the MCP process lifetime. It does not save a browser profile, cookies, or storage state.

For the guided MCP/plugin flow, start live mode without preselecting a route:

UWM_MCP_MODE=live npm start

Call mortgage_connection_status. While setup is incomplete it is side-effect-free: it returns the 1Password and manual choices without opening a browser, querying 1Password, or reading/writing Keychain. Present both choices to the user, then call mortgage_start_login with the selected route.

For onepassword, acceptUwmTerms: true is required immediately before login. Keychain persistence requires a separate rememberOnThisMac: true opt-in and defaults to false. The login action never accepts a username, password, or MFA value.

The commands below are advanced direct-start fallbacks for local testing. Running one explicitly preselects that route.

1Password-assisted route on macOS, after the user explicitly agrees to UWM's terms for that login:

UWM_MCP_ACCEPT_TERMS=1 npm run start:live:1password

If more than one 1Password account is configured, set UWM_OP_ACCOUNT to the intended account shorthand or ID. UWM_OP_ITEM may likewise pin a Login item; the exact UWM hostname is still verified before any field is read.

Manual route:

npm run start:live:manual

The 1Password route requests desktop biometric approval and fills only the primary login form. The guided route uses macOS Keychain only after the separate remember-on-this-Mac opt-in. The manual route leaves the form to the user. Both routes leave UWM email OTP/MFA entirely to the user; enter one-time codes only in the UWM browser and never in MCP or chat. Call connection status again after the dashboard appears.

The observed browser adapter supports:

  • summary: principal balance, interest rate, monthly payment, derived principal-and-interest payment, escrow payment/balance, next due date, and maturity date;
  • payment history: the date and total for initially rendered recent payment rows;
  • escrow: current balance, as-of date, monthly deposit, and initially rendered upcoming tax/insurance payouts;
  • statements: Billing statement date, year, month, and a generic title, with no filename, loan identifier, or download URL;
  • local extra-payment/payoff projections using normalized summary fields.

It does not support payment allocation breakdowns, expanding older activity, statement downloads/content, contact information, loan identifiers, autopay changes, payoff requests, or any other account mutation.

Test

npm test
npm run selftest
npm run check
npm run privacy:scan
npm run privacy:scan:history

Install as a community connector

This repository includes a local Codex/ChatGPT desktop plugin named Unofficial UWM Mortgage Reader. It runs on each user's own Mac, opens that user's own headed browser, and does not reference another user's tunnel, ChatGPT app ID, credentials, or session.

After cloning the repository locally:

npm ci
npx playwright install chromium
codex plugin marketplace add .
codex plugin add unofficial-uwm-mortgage-reader@community-uwm-mortgage-reader

Restart the desktop app, enable the plugin, and begin with mortgage_connection_status. A repository owner can also share the installed local plugin with members of the same ChatGPT workspace. This community distribution is separate from OpenAI's universal public directory.

The package remains intentionally private from npm publishing. Do not remove "private": true merely to use the repository marketplace.

Live UWM validation

The account owner authenticated normally to UWM and validated the actual servicing transport. The allowed same-origin JSON capture produced zero relevant records, so the implementation uses the required browser-extraction fallback. Do not bypass MFA or CAPTCHA. Persist secrets outside the repo.

The live test acceptance criteria are:

  1. principal balance matches the portal,
  2. interest rate matches,
  3. monthly payment and next due date match,
  4. escrow balance matches when applicable,
  5. at least two recent payment dates and totals match the rendered portal history,
  6. logout/expired session fails closed,
  7. no tool can cause a payment or account mutation.

Publication gate

package.json intentionally contains "private": true. Remove that only after live verification, privacy review, trademark wording review, and any marketplace signing requirements are independently validated.

This community project is not made, sponsored, supported, endorsed, or operated by UWM and does not speak for UWM.

Private live-discovery helper

For the account-owner test, run this on the user's own machine. The connection-status response exposes the same two login routes to every MCP client:

  • onepassword: 1Password CLI requests desktop biometric approval, caches the login in macOS Keychain for later local runs, fills only the UWM username/password form, and leaves MFA to the user. Each run requires explicit acceptance of UWM's terms.
  • manual: the user fills the UWM login form and MFA without credential automation.

After the primary login, UWM may offer an email one-time passcode. Request the email in the UWM browser, retrieve the code privately, and enter it only in that browser. Never paste the code, email contents, or email address into MCP, chat, or a terminal. Wait for the authenticated mortgage dashboard before confirming that setup is ready.

1Password route:

npm run capture:uwm:1password -- --accept-terms

Manual route:

npm install
npx playwright install chromium
npm run capture:uwm

Both routes open the exact UWM servicing URL. The browser context is ephemeral: no browser profile, cookies, or storage state are saved. After the authenticated dashboard appears, confirm readiness once in the terminal. The helper then automatically visits the observed dashboard, My Loan, and Document Center/Billing views and never opens a statement file. The capture is written under ignored private/ storage with mode 0600 and includes normalized browser-extraction data when same-origin JSON is unavailable. It does not persist passwords, cookies, or browser storage, but the private capture contains mortgage data and must never be committed.

Then inspect candidate response fields without printing full response bodies:

npm run inspect:capture -- private/uwm-capture/responses-....json

The inspector prints only candidate key paths and record counts, never captured values. This keeps private data out of logs and makes UWM portal changes detectable.

推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。

官方
精选