Skip to main content
Glama

E*TRADE MCP Server

by jjmerri

E*TRADE MCP Server

A Model Context Protocol (MCP) server for E*TRADE's Market API, built with FastMCP.

Features

This MCP server provides access to E*TRADE's Market API endpoints:

  • Quote: Get real-time and delayed quotes for stocks, options, and mutual funds

  • Product Lookup: Search for securities by symbol or company name

  • Option Chains: Get option chains with strikes and expirations

  • Option Expire Dates: Get available expiration dates for options

Installation

  1. Clone this repository

  2. Install dependencies:

pip install -e .
  1. Copy .env.example to .env and add your E*TRADE API credentials:

cp .env.example .env
  1. Edit .env and add your credentials:

ETRADE_CONSUMER_KEY=your_consumer_key_here ETRADE_CONSUMER_SECRET=your_consumer_secret_here ETRADE_ENVIRONMENT=sandbox # or 'production'

Getting E*TRADE API Credentials

  1. Go to E*TRADE Developer Portal

  2. Sign up or log in with your E*TRADE account

  3. Request a Sandbox consumer key at https://us.etrade.com/etx/ris/apikey

  4. Get your Consumer Key and Consumer Secret

  5. Start with the sandbox environment for testing

Authentication

One-time Setup (Recommended)

Run the authentication script to get and save your access tokens:

python authenticate.py

This will:

  1. Prompt you to visit an E*TRADE authorization URL

  2. Ask you to enter the verification code

  3. Save the access tokens to your .env file

The MCP server will automatically use these saved tokens.

Note: Access tokens expire at midnight US Eastern time, so you'll need to re-authenticate daily.

Alternative: Manual Authentication

You can also authenticate through the MCP tools:

  1. Call etrade_get_auth_url() to get the authorization URL

  2. Visit the URL in your browser and authorize the application

  3. Copy the verification code

  4. Call etrade_authenticate(verifier="YOUR_CODE") with the verification code

Usage

Running the Server

The server runs as an HTTP server on port 8000 with the MCP endpoint at /mcp:

etrade-mcp

Or with Python:

python -m etrade_mcp.server

The server will start at http://localhost:8000 with the MCP endpoint available at http://localhost:8000/mcp.

Connecting to the Server

Configure your MCP client to connect to the HTTP endpoint:

{ "mcpServers": { "etrade": { "url": "http://localhost:8000/mcp" } } }

Available Tools

etrade_get_auth_url()

Get the OAuth authorization URL. This is the first step in authentication.

Returns: Authorization URL to visit in browser

etrade_authenticate(verifier: str)

Complete authentication with the verification code from E*TRADE.

Args:

  • verifier: Verification code from E*TRADE

Returns: Success message

etrade_get_quote(symbols: str, require_earnings_date: bool = False, skip_mini_options_check: bool = False)

Get stock quotes for one or more symbols.

Args:

  • symbols: Comma-separated list of symbols (e.g., "AAPL,MSFT,GOOGL")

  • require_earnings_date: Include next earnings date

  • skip_mini_options_check: Skip mini options check

Returns: Quote data with prices, volume, bid/ask, etc.

etrade_lookup_product(search: str, company: str = None, type: str = None)

Look up products by symbol or company name.

Args:

  • search: Symbol or partial symbol to search

  • company: Company name (optional)

  • type: Security type - EQ, MF, OPTN (optional)

Returns: List of matching products

etrade_get_option_chains(symbol: str, ...)

Get option chains for a symbol with various filters.

Args:

  • symbol: Underlying symbol

  • expiry_year, expiry_month, expiry_day: Expiration date filters

  • strike_price_near: Filter strikes near this price

  • no_of_strikes: Number of strikes to return

  • include_weekly: Include weekly options

  • option_category: STANDARD, ALL, MINI

  • chain_type: CALL, PUT, CALLPUT

  • And more...

Returns: Option chain data

etrade_get_option_expire_dates(symbol: str, expiry_type: str = None)

Get available option expiration dates.

Args:

  • symbol: Underlying symbol

  • expiry_type: WEEKLY, MONTHLY, QUARTERLY, ALL

Returns: List of expiration dates

Example Usage with MCP Client

# Get authorization URL auth_url = etrade_get_auth_url() # Visit the URL, authorize, get verifier code # Authenticate etrade_authenticate(verifier="12345") # Get a quote quote = etrade_get_quote(symbols="AAPL") # Look up a product results = etrade_lookup_product(search="Apple") # Get option chains chains = etrade_get_option_chains( symbol="AAPL", chain_type="CALL", price_type="ATNM" ) # Get expiration dates dates = etrade_get_option_expire_dates(symbol="AAPL")

API Documentation

For detailed API documentation, see:

Environment Variables

  • ETRADE_CONSUMER_KEY: Your E*TRADE consumer key (required)

  • ETRADE_CONSUMER_SECRET: Your E*TRADE consumer secret (required)

  • ETRADE_ENVIRONMENT: sandbox or production (default: sandbox)

  • ETRADE_SANDBOX_BASE_URL: Sandbox API URL (default: https://apisb.etrade.com)

  • ETRADE_PROD_BASE_URL: Production API URL (default: https://api.etrade.com)

Security Notes

  • Never commit your .env file or expose your API credentials

  • Start with the sandbox environment for testing

  • OAuth tokens expire; you'll need to re-authenticate periodically

  • Production environment requires additional E*TRADE account approvals

Reference

This server is based on E*TRADE's sample Python client, which is included in the EtradePythonClient directory for reference.

License

MIT

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/jjmerri/etrade-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server