Becu
FreeNot checkedAn MCP server that provides read-only access to your BECU accounts via browser automation, enabling querying of account balances and transaction history convers
About
An MCP server that provides read-only access to your BECU accounts via browser automation, enabling querying of account balances and transaction history conversationally.
README
An MCP (Model Context Protocol) server that provides read-only access to your BECU accounts via browser automation. Use it with Claude Code or any MCP-compatible client to query account balances and transaction history conversationally.
What it does
Exposes three tools:
| Tool | Description |
|---|---|
get_accounts |
Returns all accounts with current balance, available balance, and YTD interest |
get_balance |
Returns balance details for a single account by index |
get_transactions |
Returns transaction history for an account (date, description, amount, balance) |
Authentication is handled automatically using Playwright to drive a Chromium browser. Sessions are persisted to session.json so subsequent calls run headlessly. If the session expires or MFA is required, a visible browser window opens for you to complete login.
Installation
Prerequisites
- Python 3.11+
- uv or pip
Steps
Clone the repository:
git clone https://github.com/jrolstad/becu-mcp.git cd becu-mcpInstall dependencies:
pip install -r requirements.txtInstall Playwright's Chromium browser:
playwright install chromiumSet your BECU credentials using one of the two options below.
Configure with Claude Code
Add the server to your Claude Code MCP settings (~/.claude.json under mcpServers). Credentials can be provided in the MCP config directly (recommended) or via a .env file.
Option A — credentials in MCP config (recommended)
Pass credentials as environment variables in the MCP server entry. This keeps everything in one place and avoids needing a .env file on disk.
{
"mcpServers": {
"becu": {
"type": "stdio",
"command": "python",
"args": ["/path/to/becu-mcp/server.py"],
"env": {
"BECU_USERNAME": "your_username_here",
"BECU_PASSWORD": "your_password_here"
}
}
}
}
Option B — .env file
Create a .env file in the repo directory:
cp .env.example .env
Then edit .env:
BECU_USERNAME=your_username_here
BECU_PASSWORD=your_password_here
The server loads this automatically via python-dotenv on startup. The .env file is gitignored.
Usage
Once connected, you can ask Claude things like:
- "List my BECU accounts with their balances"
- "What are the last 20 transactions from My Checking?"
- "What's the balance on my savings account?"
- "How much YTD interest has the Annual Payments savings account earned?"
Authentication and sessions
- On first run, a Chromium browser window opens and logs in with your credentials.
- If MFA is required, you have 60 seconds to complete it in the browser window.
- After a successful login, cookies are saved to
session.jsonfor future headless runs. - If a session expires, the browser window opens again automatically.
session.jsonis gitignored — do not commit it.
Development
Project structure
becu_client.py # Playwright scraping and HTML parsing logic
server.py # MCP server (FastMCP) — exposes tools to MCP clients
requirements.txt # Python dependencies
.env.example # Credential template
session.json # Persisted browser session cookies (gitignored)
How scraping works
becu_client.py uses Playwright to load pages from onlinebanking.becu.org, then parses the HTML with BeautifulSoup. The BECU pages use a Tablesaw responsive table library that embeds column labels inside each <td> as <b class="tablesaw-cell-label"> elements. The parser extracts these labels to identify each cell's field regardless of column order, making it resilient to layout changes.
Key functions:
_get_page_html()— fetches a page, handles auth/session management_cell_label_and_value()— extracts the field label and value from a tablesaw<td>_parse_currency()— converts"$1,234.56"to1234.56get_accounts()— scrapes the Summary page, deduplicates by account numberget_transactions()— scrapes the Activity page, filters out summary/non-transaction rows
Running locally
python server.py
Or via the MCP CLI:
mcp dev server.py
Adding new tools
- Add a new async function to
becu_client.pythat fetches and parses the relevant BECU page. - Register it as a tool in
server.pyusing the@mcp.tool()decorator. - Reconnect your MCP client to pick up the new tool.
Dependencies
| Package | Purpose |
|---|---|
mcp |
MCP server framework (FastMCP) |
playwright |
Headless browser automation for scraping |
beautifulsoup4 |
HTML parsing |
python-dotenv |
Loading credentials from .env |
Installing Becu
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/jrolstad/becu-mcpFAQ
Is Becu MCP free?
Yes, Becu MCP is free — one-click install via Unyly at no cost.
Does Becu need an API key?
No, Becu runs without API keys or environment variables.
Is Becu hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Becu in Claude Desktop, Claude Code or Cursor?
Open Becu on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Playwright
Browser automation, scraping, screenshots
by MicrosoftPuppeteer
Browser automation and web scraping.
by modelcontextprotocolopentabs-dev/opentabs
Plugin-based MCP server + Chrome extension that gives AI agents access to web applications through the user's authenticated browser session. 100+ plugins with a
by opentabs-devrobhunter/agentdeals
1,500+ developer infrastructure deals, free tiers, and startup programs across 54 categories. Search deals, compare vendors, plan stacks, and track pricing chan
by robhunterCompare Becu with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All browse MCPs
