becu-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@becu-mcplist my BECU accounts with balances"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
becu-mcp
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 |
| Returns all accounts with current balance, available balance, and YTD interest |
| Returns balance details for a single account by index |
| 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.
Related MCP server: Account and Transaction MCP Server
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 .envThen edit .env:
BECU_USERNAME=your_username_here
BECU_PASSWORD=your_password_hereThe 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.pyOr via the MCP CLI:
mcp dev server.pyAdding 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 server framework (FastMCP) |
| Headless browser automation for scraping |
| HTML parsing |
| Loading credentials from |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jrolstad/becu-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server