Schwab Marketdata Mcp

security MCP Server

Read-only MCP server for Charles Schwab Market Data Production API (14 tools, OAuth, DuckDB cache, OWASP-tested).

Verified
securitysecurity
3 views2 stars0 forksMIT

Why This Matters

Discovered via github-topic:mcp and last synced 3mo ago.

Verified
Source
github-topic:mcp
Stars
2
Last synced
3mo ago
Install
Check source

Install

Install instructions not detected yet

Check the source repository for the latest setup steps.

View source instructions
35
Tools
0
Resources
0
Prompts
Standard I/O
Transport

Available Tools (35)

1

`get_quote`

10

`search_instruments`

MONTH

`DAILY` / `WEEKLY`

Symptom

Fix

Backend

Default

memory

16

`get_iv_surface`

8

`get_market_hour_single`

period_type

Legal `frequency_type` × `frequency`

OS

macOS 11+ / Linux / WSL2 / Windows 10/11 native (Tier A)

4

`get_option_chain`

13

`get_server_info`

2

`get_quotes`

11

`get_instrument_by_cusip`

YEAR

`DAILY` / `WEEKLY` / `MONTHLY`

6

`get_option_greeks_summary`

15

`get_iv_percentile`

Python

`>=3.11`

7

`get_market_hours`

MISSING

INSECURE_PERMS

uv

`>=0.4`

5

`get_option_expiration_chain`

14

`get_cache_stats`

Requirement

Version

3

`get_price_history`

12

`health_check`

YEAR_TO_DATE

`DAILY` / `WEEKLY`

DAY

`MINUTE` × {1, 5, 10, 15, 30}

Metric

Target

Status

Recommended third-party

clickhouse

17

`get_streaming_snapshot` 🧪

Tool

Endpoint

9

`get_movers`

60d

90d: {current_iv, percentile_rank, sample_count, min_iv, max_iv, median_iv, current_asof}}, warning}` - **Persistence**: built from durable `iv_history` rows that only the **ClickHouse** backend retains. On the memory backend / disabled cache the buckets come back empty with `warning: ["requires_clickhouse_persistence"]` — the read path never raises. - **Example**: `{"underlying": "AAPL", "lookback_days": 252}` ##### `get_streaming_snapshot` 🧪 — bounded WebSocket snapshot - **When**: you need real-time bid/ask/last (sub-second freshness) or a live 1-minute candle and the REST `get_quote` / `get_price_history` freshness (delayed ~5–15 s) is not good enough. Tool opens a Schwab Streamer WebSocket, collects messages for the requested duration, then disconnects — fits the request-response semantics of MCP rather than holding a long-running subscription. - **Input**: `symbols` (list[str], ≤ 20), `service` (`LEVELONE_EQUITIES` for real-time bid/ask/last/volume **or** `CHART_EQUITY` for real-time 1-minute candles), `duration_ms?` (int, default 2000, hard-bounded 500 – 10000). - **Returns**: `{service, symbols_requested, symbols_received, duration_ms, messages_count, snapshots: {sym: [{ts, bid