Skip to main content
Glama
jrolstad
by jrolstad

becu-mcp

License: MIT

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.

Related MCP server: Account and Transaction MCP Server

Installation

Prerequisites

  • Python 3.11+

  • uv or pip

Steps

  1. Clone the repository:

    git clone https://github.com/jrolstad/becu-mcp.git
    cd becu-mcp
  2. Install dependencies:

    pip install -r requirements.txt
  3. Install Playwright's Chromium browser:

    playwright install chromium
  4. Set 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.json for future headless runs.

  • If a session expires, the browser window opens again automatically.

  • session.json is 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" to 1234.56

  • get_accounts() — scrapes the Summary page, deduplicates by account number

  • get_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

  1. Add a new async function to becu_client.py that fetches and parses the relevant BECU page.

  2. Register it as a tool in server.py using the @mcp.tool() decorator.

  3. 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

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

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