E*TRADE MCP Server
This ETRADE MCP Server provides programmatic access to ETRADE's Market API through the Model Context Protocol, enabling comprehensive market data retrieval and analysis.
Authentication Management: Handle OAuth authentication by retrieving the authorization URL (etrade_get_auth_url) and completing authentication with verification codes (etrade_authenticate).
Market Data Access: Get real-time or delayed quotes for single or multiple symbols (etrade_get_quote), including price, volume, bid/ask spreads, and optionally earnings dates. Supports stocks, options, and mutual funds.
Security Lookup: Search for financial products (etrade_lookup_product) by full or partial symbols or company names, with filtering across security types (equities, mutual funds, options).
Options Analysis: Retrieve detailed option chains (etrade_get_option_chains) with customizable filters for expiration dates, strike price ranges, option types (calls/puts), weekly vs standard options, and price positioning (at-the-money or all).
Expiration Date Discovery: List available option expiration dates (etrade_get_option_expire_dates) for any symbol, filterable by type (weekly, monthly, quarterly, or all).
Environment Support: Works with both E*TRADE sandbox (testing) and production environments, with secure credential management via environment variables.
Click on "Deploy 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., "@E*TRADE MCP Server get quote for AAPL and MSFT"
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.
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
Related MCP server: polygon-mcp
Installation
Clone this repository
Install dependencies:
pip install -e .Copy
.env.exampleto.envand add your E*TRADE API credentials:
cp .env.example .envEdit
.envand 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
Go to E*TRADE Developer Portal
Sign up or log in with your E*TRADE account
Request a Sandbox consumer key at https://us.etrade.com/etx/ris/apikey
Get your Consumer Key and Consumer Secret
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.pyThis will:
Prompt you to visit an E*TRADE authorization URL
Ask you to enter the verification code
Save the access tokens to your
.envfile
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:
Call
etrade_get_auth_url()to get the authorization URLVisit the URL in your browser and authorize the application
Copy the verification code
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-mcpOr with Python:
python -m etrade_mcp.serverThe 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 dateskip_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 searchcompany: 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 symbolexpiry_year,expiry_month,expiry_day: Expiration date filtersstrike_price_near: Filter strikes near this priceno_of_strikes: Number of strikes to returninclude_weekly: Include weekly optionsoption_category: STANDARD, ALL, MINIchain_type: CALL, PUT, CALLPUTAnd more...
Returns: Option chain data
etrade_get_option_expire_dates(symbol: str, expiry_type: str = None)
Get available option expiration dates.
Args:
symbol: Underlying symbolexpiry_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:sandboxorproduction(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
.envfile or expose your API credentialsStart 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
Available Tools
6 toolsetrade_authenticateB
Complete E*TRADE OAuth authentication with verification code.
Args: verifier: The verification code received after authorizing the application
Returns: Success message
Inputs: verifier (required). Returns: result
etrade_get_auth_urlA
Get E*TRADE OAuth authorization URL. This is the first step in authentication - returns a URL for the user to visit.
Returns: Authorization URL that the user should visit in their browser
Inputs: no named parameters. Returns: result
etrade_get_option_chainsB
Get option chains for a symbol.
Args: symbol: Underlying stock symbol (e.g., "AAPL") expiry_year: Expiration year (4-digit, e.g., 2024) expiry_month: Expiration month (1-12) expiry_day: Expiration day (1-31) strike_price_near: Strike price near this value no_of_strikes: Number of strikes to return include_weekly: Include weekly options skip_adjusted: Skip adjusted options option_category: STANDARD, ALL, or MINI chain_type: CALL, PUT, or CALLPUT price_type: ATNM (at the money) or ALL
Returns: Option chain data with available strikes and expiration dates
Inputs: symbol (required), expiry_year, expiry_month, expiry_day, +7 more. Returns: object
etrade_get_option_expire_datesB
Get option expiration dates for a symbol.
Args: symbol: Underlying stock symbol (e.g., "AAPL") expiry_type: WEEKLY, MONTHLY, QUARTERLY, or ALL (optional)
Returns: List of available expiration dates for options
Inputs: symbol (required), expiry_type. Returns: object
etrade_get_quoteB
Get stock quote for one or more symbols.
Args: symbols: Comma-separated list of stock symbols (e.g., "AAPL", "MSFT,GOOGL") require_earnings_date: If true, return next earnings date skip_mini_options_check: If true, skip check for mini options
Returns: Quote data including price, volume, bid/ask, and other market information
Inputs: symbols (required), require_earnings_date, skip_mini_options_check. Returns: object
etrade_lookup_productC
Look up products by symbol or company name.
Args: search: Full or partial symbol name to search for company: Full or partial company name (optional) type: Security type - EQ (equity), MF (mutual fund), OPTN (option) (optional)
Returns: List of matching products with details
Inputs: search (required), company, type. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose with no overlap. Authentication tools handle OAuth flow, option tools retrieve chains and expiration dates, quote tool gets market data, and lookup tool searches for products. An agent can easily distinguish between these functions.
All tools follow a consistent 'etrade_verb_noun' pattern with snake_case throughout. The naming convention is perfectly uniform across all six tools, making them predictable and easy to understand.
Six tools is reasonable for an E*TRADE API server, covering authentication, options data, quotes, and product lookup. While slightly lean, it provides core functionality without being overwhelming or insufficient for the domain.
The server covers authentication, options data retrieval, quotes, and product lookup well. However, there are notable gaps for a trading platform: no tools for account management (balances, positions), order placement (buy/sell), or portfolio analysis, which limits comprehensive trading workflows.
Maintenance
Related MCP Connectors
Market reports, earnings history, research, portfolio analysis and read-only Workspace tools.
Read-only market research: index funds, event cards, CLOB data, fund analytics. No orders.
Market Data App MCP — wraps the Market Data App API (marketdata.app)
Read-only stock research; OAuth unlocks your own portfolio, watchlist, and Smart Alerts.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to retrieve real-time stock and options market data through the E\*TRADE API using natural language. It features secure OAuth 1.0 authentication, persistent token management, and comprehensive support for stock quotes, options chains, and Greeks.2-
- AlicenseCqualityDmaintenanceEnables querying real-time and historical financial market data for stocks, options, forex, and crypto, including quotes, trades, technical indicators, and reference data through a set of MCP tools.713MIT
- AlicenseNot gradedqualityCmaintenanceProvides stock and options market data via the Tradier Brokerage API, enabling AI agents to query financial data through natural language.304 npmMIT
- FlicenseAqualityBmaintenanceEnables MCP clients to retrieve stock market and company financial data, including quotes, overviews, ratios, historical prices, income statements, and stock comparisons, via a set of tools.7-