webull-openapi-mcp 1.2.1__tar.gz → 1.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/.github/workflows/pypi-ci.yml +1 -1
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/PKG-INFO +39 -41
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/README.md +36 -38
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/pyproject.toml +2 -2
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/server.json +2 -2
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/__init__.py +1 -1
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/region_config.py +12 -4
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/financial.py +1 -1
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/fundamental.py +1 -1
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/screener.py +1 -1
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/instrument.py +7 -3
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/.env.example +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/.gitignore +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/DISCLAIMER.md +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/LICENSE +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/.mcpbignore +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/build.sh +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/build_manifest.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/src/server.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/__init__.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_account_tools.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_audit.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_cli.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_config.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_errors.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_formatters.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_fundamental_screener_registration.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_fundamental_tools.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_guards.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_instrument_tools.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_market_data_tools.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_audit.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_config.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_formatters.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_guards.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_sdk.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_server.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_screener_tools.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_sdk_client.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_stock_order_tools.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/__main__.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/audit.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/cli.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/config.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/constants.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/errors.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/formatters.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/guards.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/sdk_client.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/server.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/__init__.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/__init__.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/crypto.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/event.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/futures.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/option.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/stock.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/watchlist.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/__init__.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/account.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/assets.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/crypto_order.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/event_order.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/futures_order.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/option_order.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/order.py +0 -0
- {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/stock_order.py +0 -0
|
@@ -100,7 +100,7 @@ jobs:
|
|
|
100
100
|
path: dist/
|
|
101
101
|
|
|
102
102
|
- name: Publish package to PyPI
|
|
103
|
-
uses: pypa/gh-action-pypi-publish@
|
|
103
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
104
104
|
with:
|
|
105
105
|
user: __token__
|
|
106
106
|
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: webull-openapi-mcp
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: MCP Server for Webull OpenAPI - enables AI assistants to securely access Webull trading and market data
|
|
5
5
|
Project-URL: Homepage, https://github.com/webull-inc/webull-openapi-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/webull-inc/webull-openapi-mcp
|
|
@@ -20,7 +20,7 @@ Requires-Python: <3.13,>=3.10
|
|
|
20
20
|
Requires-Dist: click
|
|
21
21
|
Requires-Dist: fastmcp==3.0.2
|
|
22
22
|
Requires-Dist: python-dotenv
|
|
23
|
-
Requires-Dist: webull-openapi-python-sdk==2.0.
|
|
23
|
+
Requires-Dist: webull-openapi-python-sdk==2.0.17
|
|
24
24
|
Provides-Extra: dev
|
|
25
25
|
Requires-Dist: hypothesis; extra == 'dev'
|
|
26
26
|
Requires-Dist: pytest; extra == 'dev'
|
|
@@ -55,8 +55,8 @@ See [DISCLAIMER.md](DISCLAIMER.md) for the full disclaimer.
|
|
|
55
55
|
- **Screener** — Top gainers/losers, most active, market sectors, high dividend, and 52-week high/low rankings
|
|
56
56
|
- **Watchlist** — Create, manage, and query user watchlists and instruments
|
|
57
57
|
- **Fundamental Data** — Company profiles, analyst ratings, and target prices
|
|
58
|
-
- **Stock & Fund Fundamentals** — Capital flow, SEC filings, earnings/dividend calendar, forecast EPS, industry comparison, and full fund data (rating, performance, allocation, holdings, brief, dividends, splits, net value, files)
|
|
59
|
-
- **Financial Statements** — Financial alert, indicators, income statement, balance sheet, and cash flow
|
|
58
|
+
- **Stock & Fund Fundamentals** — Capital flow, SEC filings, earnings/dividend calendar, forecast EPS, industry comparison, and full fund data (rating, performance, allocation, holdings, brief, dividends, splits, net value, files)
|
|
59
|
+
- **Financial Statements** — Financial alert, indicators, income statement, balance sheet, and cash flow
|
|
60
60
|
- **Trading** — Place, modify, cancel orders for stocks, options, futures, crypto, and event contracts
|
|
61
61
|
- **Combo Orders** — OTO, OCO, OTOCO combo orders (US only)
|
|
62
62
|
- **Option Strategies** — Multi-leg option strategies: vertical, straddle, strangle, butterfly, condor, etc. (US only)
|
|
@@ -332,15 +332,14 @@ See [.env.example](.env.example) for full configuration template.
|
|
|
332
332
|
|
|
333
333
|
### Market Data
|
|
334
334
|
|
|
335
|
-
| Category | Tools
|
|
336
|
-
|
|
337
|
-
| **Stock** | `get_stock_tick`, `get_stock_snapshot`, `get_stock_quotes`, `get_stock_footprint`, `get_stock_bars`, `get_stock_bars_single`, `get_stock_noii_bars`, `get_stock_noii_snapshot`
|
|
338
|
-
| **Futures** | `get_futures_tick`, `get_futures_snapshot`, `get_futures_depth`, `get_futures_bars`, `get_futures_footprint`
|
|
339
|
-
| **Crypto** | `get_crypto_snapshot`, `get_crypto_bars`
|
|
340
|
-
| **Option** | `get_option_tick`, `get_option_snapshot`, `get_option_bars`
|
|
341
|
-
| **Event** | `get_event_tick`, `get_event_snapshot`, `get_event_depth`, `get_event_bars`
|
|
342
|
-
| **Screener** | `get_gainers_losers`, `get_most_active` | All |
|
|
343
|
-
| **Screener (Sectors/Dividend/52W)** | `get_market_sectors`, `get_market_sectors_detail`, `get_high_dividend`, `get_52_week_high_low` | US, HK, JP |
|
|
335
|
+
| Category | Tools | Region |
|
|
336
|
+
|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|
|
|
337
|
+
| **Stock** | `get_stock_tick`, `get_stock_snapshot`, `get_stock_quotes`, `get_stock_footprint`, `get_stock_bars`, `get_stock_bars_single`, `get_stock_noii_bars`, `get_stock_noii_snapshot` | All |
|
|
338
|
+
| **Futures** | `get_futures_tick`, `get_futures_snapshot`, `get_futures_depth`, `get_futures_bars`, `get_futures_footprint` | US, HK |
|
|
339
|
+
| **Crypto** | `get_crypto_snapshot`, `get_crypto_bars` | US |
|
|
340
|
+
| **Option** | `get_option_tick`, `get_option_snapshot`, `get_option_bars` | US, HK, JP |
|
|
341
|
+
| **Event** | `get_event_tick`, `get_event_snapshot`, `get_event_depth`, `get_event_bars` | US |
|
|
342
|
+
| **Screener** | `get_gainers_losers`, `get_most_active`, `get_market_sectors`, `get_market_sectors_detail`, `get_high_dividend`, `get_52_week_high_low` | All |
|
|
344
343
|
| **Watchlist** | `get_watchlists`, `create_watchlist`, `update_watchlist`, `delete_watchlist`, `get_watchlist_instruments`, `add_watchlist_instruments`, `remove_watchlist_instruments`, `update_watchlist_instruments` | All |
|
|
345
344
|
|
|
346
345
|
### Fundamental & Instrument
|
|
@@ -349,9 +348,9 @@ See [.env.example](.env.example) for full configuration template.
|
|
|
349
348
|
|----------|-------|--------|
|
|
350
349
|
| **Instrument** | `get_instruments`, `get_option_contracts`, `get_futures_instruments`, `get_futures_products`, `get_crypto_instruments`, `get_event_series`, `get_event_instruments`, `get_event_categories`, `get_event_events` | varies |
|
|
351
350
|
| **Fundamental** | `get_company_profile`, `get_analyst_rating`, `get_analyst_target_price` | All |
|
|
352
|
-
| **Stock Fundamentals** | `get_stock_capital_flow`, `get_stock_filings`, `get_stock_earnings_calendar`, `get_stock_dividend_calendar`, `get_stock_forecast_eps`, `get_stock_industry_comparison` |
|
|
353
|
-
| **Fund Fundamentals** | `get_fund_rating`, `get_fund_performance`, `get_fund_allocation`, `get_fund_holdings`, `get_fund_brief`, `get_fund_dividends`, `get_fund_splits`, `get_fund_net_value`, `get_fund_files` |
|
|
354
|
-
| **Financial Statements** | `get_financial_alert`, `get_financial_indicators`, `get_income_statement`, `get_balance_sheet`, `get_cash_flow` |
|
|
351
|
+
| **Stock Fundamentals** | `get_stock_capital_flow`, `get_stock_filings`, `get_stock_earnings_calendar`, `get_stock_dividend_calendar`, `get_stock_forecast_eps`, `get_stock_industry_comparison` | All |
|
|
352
|
+
| **Fund Fundamentals** | `get_fund_rating`, `get_fund_performance`, `get_fund_allocation`, `get_fund_holdings`, `get_fund_brief`, `get_fund_dividends`, `get_fund_splits`, `get_fund_net_value`, `get_fund_files` | All |
|
|
353
|
+
| **Financial Statements** | `get_financial_alert`, `get_financial_indicators`, `get_income_statement`, `get_balance_sheet`, `get_cash_flow` | All |
|
|
355
354
|
|
|
356
355
|
### Trading
|
|
357
356
|
|
|
@@ -371,31 +370,30 @@ See [.env.example](.env.example) for full configuration template.
|
|
|
371
370
|
|
|
372
371
|
### Region Differences
|
|
373
372
|
|
|
374
|
-
| Feature
|
|
375
|
-
|
|
376
|
-
| Stock Trading
|
|
377
|
-
| Option Trading
|
|
378
|
-
| Futures Trading
|
|
379
|
-
| Crypto Trading
|
|
380
|
-
| Event Contracts
|
|
381
|
-
| Combo Orders
|
|
382
|
-
| Option Strategies
|
|
383
|
-
| Algo Orders
|
|
384
|
-
| Screener
|
|
385
|
-
|
|
|
386
|
-
| Watchlist | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
373
|
+
| Feature | US | HK | JP | SG | TH | MY | UK | MX | BR | EU | ZA | AU |
|
|
374
|
+
|-----------------------------|----|----|----|----|----|----|-----|----|----|----|----|-----|
|
|
375
|
+
| Stock Trading | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
376
|
+
| Option Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
|
|
377
|
+
| Futures Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
|
|
378
|
+
| Crypto Trading | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
379
|
+
| Event Contracts | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
380
|
+
| Combo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
381
|
+
| Option Strategies | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
382
|
+
| Algo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
383
|
+
| Screener | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
384
|
+
| Watchlist | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
387
385
|
| Fundamental (Company/Analyst) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
388
|
-
| Stock/Fund Fundamentals
|
|
389
|
-
| Financial Statements
|
|
390
|
-
| NOII (Auction Imbalance)
|
|
391
|
-
| Markets
|
|
392
|
-
| Instrument Categories
|
|
393
|
-
| Order Types
|
|
394
|
-
| Time-in-Force
|
|
395
|
-
| Trading Sessions
|
|
396
|
-
| JP Order Fields
|
|
397
|
-
|
|
398
|
-
> **Note:** Screener (Gainers/Losers/Active), Fundamental (Company/Analyst), and NOII currently only support querying US stock data (`US_STOCK` category). Stock/Fund Fundamentals, Financial Statements, and the extended Screener (Sectors/Dividend/52W) are available in
|
|
386
|
+
| Stock/Fund Fundamentals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
387
|
+
| Financial Statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
388
|
+
| NOII (Auction Imbalance) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
389
|
+
| Markets | US | US, HK, CN | US, JP | US | US | US | US | US | US | US | US | US |
|
|
390
|
+
| Instrument Categories | US_STOCK, US_ETF | US_STOCK, US_ETF, HK_STOCK, CN_STOCK | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF |
|
|
391
|
+
| Order Types | LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT, TRAILING_STOP_LOSS, etc. | LIMIT, MARKET, ENHANCED_LIMIT, AT_AUCTION, AT_AUCTION_LIMIT, etc. | JP market: LIMIT, MARKET — US market: LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT |
|
|
392
|
+
| Time-in-Force | DAY, GTC | US market: DAY, GTC, GTD — HK market: DAY, GTC — CN market: DAY | JP market: DAY — US market: DAY, GTC, GTD | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC |
|
|
393
|
+
| Trading Sessions | ALL, CORE, NIGHT | CORE, ALL_DAY, NIGHT, ALL | CORE, ALL, NIGHT, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY |
|
|
394
|
+
| JP Order Fields | — | — | `account_tax_type` required (GENERAL or SPECIFIC); `margin_type` (ONE_DAY or INDEFINITE) and `position_intent` optional margin-account-only fields; `close_contracts` optional | — | — | — | — | — | — | — | — | — |
|
|
395
|
+
|
|
396
|
+
> **Note:** Screener (Gainers/Losers/Active), Fundamental (Company/Analyst), and NOII currently only support querying US stock data (`US_STOCK` category). Stock/Fund Fundamentals, Financial Statements, and the extended Screener (Sectors/Dividend/52W) are available in all regions; supported `category` values vary by endpoint (commonly `US_STOCK`, `HK_STOCK`, `CN_STOCK`, `JP_STOCK`). Watchlist supports US stocks and HK stocks.
|
|
399
397
|
|
|
400
398
|
---
|
|
401
399
|
|
|
@@ -25,8 +25,8 @@ See [DISCLAIMER.md](DISCLAIMER.md) for the full disclaimer.
|
|
|
25
25
|
- **Screener** — Top gainers/losers, most active, market sectors, high dividend, and 52-week high/low rankings
|
|
26
26
|
- **Watchlist** — Create, manage, and query user watchlists and instruments
|
|
27
27
|
- **Fundamental Data** — Company profiles, analyst ratings, and target prices
|
|
28
|
-
- **Stock & Fund Fundamentals** — Capital flow, SEC filings, earnings/dividend calendar, forecast EPS, industry comparison, and full fund data (rating, performance, allocation, holdings, brief, dividends, splits, net value, files)
|
|
29
|
-
- **Financial Statements** — Financial alert, indicators, income statement, balance sheet, and cash flow
|
|
28
|
+
- **Stock & Fund Fundamentals** — Capital flow, SEC filings, earnings/dividend calendar, forecast EPS, industry comparison, and full fund data (rating, performance, allocation, holdings, brief, dividends, splits, net value, files)
|
|
29
|
+
- **Financial Statements** — Financial alert, indicators, income statement, balance sheet, and cash flow
|
|
30
30
|
- **Trading** — Place, modify, cancel orders for stocks, options, futures, crypto, and event contracts
|
|
31
31
|
- **Combo Orders** — OTO, OCO, OTOCO combo orders (US only)
|
|
32
32
|
- **Option Strategies** — Multi-leg option strategies: vertical, straddle, strangle, butterfly, condor, etc. (US only)
|
|
@@ -302,15 +302,14 @@ See [.env.example](.env.example) for full configuration template.
|
|
|
302
302
|
|
|
303
303
|
### Market Data
|
|
304
304
|
|
|
305
|
-
| Category | Tools
|
|
306
|
-
|
|
307
|
-
| **Stock** | `get_stock_tick`, `get_stock_snapshot`, `get_stock_quotes`, `get_stock_footprint`, `get_stock_bars`, `get_stock_bars_single`, `get_stock_noii_bars`, `get_stock_noii_snapshot`
|
|
308
|
-
| **Futures** | `get_futures_tick`, `get_futures_snapshot`, `get_futures_depth`, `get_futures_bars`, `get_futures_footprint`
|
|
309
|
-
| **Crypto** | `get_crypto_snapshot`, `get_crypto_bars`
|
|
310
|
-
| **Option** | `get_option_tick`, `get_option_snapshot`, `get_option_bars`
|
|
311
|
-
| **Event** | `get_event_tick`, `get_event_snapshot`, `get_event_depth`, `get_event_bars`
|
|
312
|
-
| **Screener** | `get_gainers_losers`, `get_most_active` | All |
|
|
313
|
-
| **Screener (Sectors/Dividend/52W)** | `get_market_sectors`, `get_market_sectors_detail`, `get_high_dividend`, `get_52_week_high_low` | US, HK, JP |
|
|
305
|
+
| Category | Tools | Region |
|
|
306
|
+
|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|
|
|
307
|
+
| **Stock** | `get_stock_tick`, `get_stock_snapshot`, `get_stock_quotes`, `get_stock_footprint`, `get_stock_bars`, `get_stock_bars_single`, `get_stock_noii_bars`, `get_stock_noii_snapshot` | All |
|
|
308
|
+
| **Futures** | `get_futures_tick`, `get_futures_snapshot`, `get_futures_depth`, `get_futures_bars`, `get_futures_footprint` | US, HK |
|
|
309
|
+
| **Crypto** | `get_crypto_snapshot`, `get_crypto_bars` | US |
|
|
310
|
+
| **Option** | `get_option_tick`, `get_option_snapshot`, `get_option_bars` | US, HK, JP |
|
|
311
|
+
| **Event** | `get_event_tick`, `get_event_snapshot`, `get_event_depth`, `get_event_bars` | US |
|
|
312
|
+
| **Screener** | `get_gainers_losers`, `get_most_active`, `get_market_sectors`, `get_market_sectors_detail`, `get_high_dividend`, `get_52_week_high_low` | All |
|
|
314
313
|
| **Watchlist** | `get_watchlists`, `create_watchlist`, `update_watchlist`, `delete_watchlist`, `get_watchlist_instruments`, `add_watchlist_instruments`, `remove_watchlist_instruments`, `update_watchlist_instruments` | All |
|
|
315
314
|
|
|
316
315
|
### Fundamental & Instrument
|
|
@@ -319,9 +318,9 @@ See [.env.example](.env.example) for full configuration template.
|
|
|
319
318
|
|----------|-------|--------|
|
|
320
319
|
| **Instrument** | `get_instruments`, `get_option_contracts`, `get_futures_instruments`, `get_futures_products`, `get_crypto_instruments`, `get_event_series`, `get_event_instruments`, `get_event_categories`, `get_event_events` | varies |
|
|
321
320
|
| **Fundamental** | `get_company_profile`, `get_analyst_rating`, `get_analyst_target_price` | All |
|
|
322
|
-
| **Stock Fundamentals** | `get_stock_capital_flow`, `get_stock_filings`, `get_stock_earnings_calendar`, `get_stock_dividend_calendar`, `get_stock_forecast_eps`, `get_stock_industry_comparison` |
|
|
323
|
-
| **Fund Fundamentals** | `get_fund_rating`, `get_fund_performance`, `get_fund_allocation`, `get_fund_holdings`, `get_fund_brief`, `get_fund_dividends`, `get_fund_splits`, `get_fund_net_value`, `get_fund_files` |
|
|
324
|
-
| **Financial Statements** | `get_financial_alert`, `get_financial_indicators`, `get_income_statement`, `get_balance_sheet`, `get_cash_flow` |
|
|
321
|
+
| **Stock Fundamentals** | `get_stock_capital_flow`, `get_stock_filings`, `get_stock_earnings_calendar`, `get_stock_dividend_calendar`, `get_stock_forecast_eps`, `get_stock_industry_comparison` | All |
|
|
322
|
+
| **Fund Fundamentals** | `get_fund_rating`, `get_fund_performance`, `get_fund_allocation`, `get_fund_holdings`, `get_fund_brief`, `get_fund_dividends`, `get_fund_splits`, `get_fund_net_value`, `get_fund_files` | All |
|
|
323
|
+
| **Financial Statements** | `get_financial_alert`, `get_financial_indicators`, `get_income_statement`, `get_balance_sheet`, `get_cash_flow` | All |
|
|
325
324
|
|
|
326
325
|
### Trading
|
|
327
326
|
|
|
@@ -341,31 +340,30 @@ See [.env.example](.env.example) for full configuration template.
|
|
|
341
340
|
|
|
342
341
|
### Region Differences
|
|
343
342
|
|
|
344
|
-
| Feature
|
|
345
|
-
|
|
346
|
-
| Stock Trading
|
|
347
|
-
| Option Trading
|
|
348
|
-
| Futures Trading
|
|
349
|
-
| Crypto Trading
|
|
350
|
-
| Event Contracts
|
|
351
|
-
| Combo Orders
|
|
352
|
-
| Option Strategies
|
|
353
|
-
| Algo Orders
|
|
354
|
-
| Screener
|
|
355
|
-
|
|
|
356
|
-
| Watchlist | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
343
|
+
| Feature | US | HK | JP | SG | TH | MY | UK | MX | BR | EU | ZA | AU |
|
|
344
|
+
|-----------------------------|----|----|----|----|----|----|-----|----|----|----|----|-----|
|
|
345
|
+
| Stock Trading | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
346
|
+
| Option Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
|
|
347
|
+
| Futures Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
|
|
348
|
+
| Crypto Trading | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
349
|
+
| Event Contracts | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
350
|
+
| Combo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
351
|
+
| Option Strategies | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
352
|
+
| Algo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
|
|
353
|
+
| Screener | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
354
|
+
| Watchlist | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
357
355
|
| Fundamental (Company/Analyst) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
358
|
-
| Stock/Fund Fundamentals
|
|
359
|
-
| Financial Statements
|
|
360
|
-
| NOII (Auction Imbalance)
|
|
361
|
-
| Markets
|
|
362
|
-
| Instrument Categories
|
|
363
|
-
| Order Types
|
|
364
|
-
| Time-in-Force
|
|
365
|
-
| Trading Sessions
|
|
366
|
-
| JP Order Fields
|
|
367
|
-
|
|
368
|
-
> **Note:** Screener (Gainers/Losers/Active), Fundamental (Company/Analyst), and NOII currently only support querying US stock data (`US_STOCK` category). Stock/Fund Fundamentals, Financial Statements, and the extended Screener (Sectors/Dividend/52W) are available in
|
|
356
|
+
| Stock/Fund Fundamentals | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
357
|
+
| Financial Statements | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
358
|
+
| NOII (Auction Imbalance) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
|
|
359
|
+
| Markets | US | US, HK, CN | US, JP | US | US | US | US | US | US | US | US | US |
|
|
360
|
+
| Instrument Categories | US_STOCK, US_ETF | US_STOCK, US_ETF, HK_STOCK, CN_STOCK | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF | US_STOCK, US_ETF |
|
|
361
|
+
| Order Types | LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT, TRAILING_STOP_LOSS, etc. | LIMIT, MARKET, ENHANCED_LIMIT, AT_AUCTION, AT_AUCTION_LIMIT, etc. | JP market: LIMIT, MARKET — US market: LIMIT, MARKET, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT | MARKET, LIMIT, STOP_LOSS, STOP_LOSS_LIMIT |
|
|
362
|
+
| Time-in-Force | DAY, GTC | US market: DAY, GTC, GTD — HK market: DAY, GTC — CN market: DAY | JP market: DAY — US market: DAY, GTC, GTD | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC | DAY, GTC |
|
|
363
|
+
| Trading Sessions | ALL, CORE, NIGHT | CORE, ALL_DAY, NIGHT, ALL | CORE, ALL, NIGHT, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY | NIGHT, ALL, CORE, ALL_DAY |
|
|
364
|
+
| JP Order Fields | — | — | `account_tax_type` required (GENERAL or SPECIFIC); `margin_type` (ONE_DAY or INDEFINITE) and `position_intent` optional margin-account-only fields; `close_contracts` optional | — | — | — | — | — | — | — | — | — |
|
|
365
|
+
|
|
366
|
+
> **Note:** Screener (Gainers/Losers/Active), Fundamental (Company/Analyst), and NOII currently only support querying US stock data (`US_STOCK` category). Stock/Fund Fundamentals, Financial Statements, and the extended Screener (Sectors/Dividend/52W) are available in all regions; supported `category` values vary by endpoint (commonly `US_STOCK`, `HK_STOCK`, `CN_STOCK`, `JP_STOCK`). Watchlist supports US stocks and HK stocks.
|
|
369
367
|
|
|
370
368
|
---
|
|
371
369
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "webull-openapi-mcp"
|
|
7
|
-
version = "1.2.
|
|
7
|
+
version = "1.2.2"
|
|
8
8
|
description = "MCP Server for Webull OpenAPI - enables AI assistants to securely access Webull trading and market data"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -24,7 +24,7 @@ dependencies = [
|
|
|
24
24
|
"fastmcp==3.0.2",
|
|
25
25
|
"click",
|
|
26
26
|
"python-dotenv",
|
|
27
|
-
"webull-openapi-python-sdk==2.0.
|
|
27
|
+
"webull-openapi-python-sdk==2.0.17",
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
[project.urls]
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "io.github.webull-inc/webull-openapi-mcp",
|
|
4
4
|
"title": "Webull OpenAPI",
|
|
5
5
|
"description": "MCP server for Webull OpenAPI: trading and market data access for AI assistants",
|
|
6
|
-
"version": "1.2.
|
|
6
|
+
"version": "1.2.2",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/webull-inc/webull-openapi-mcp",
|
|
9
9
|
"source": "github"
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"registryBaseUrl": "https://pypi.org",
|
|
15
15
|
"identifier": "webull-openapi-mcp",
|
|
16
|
-
"version": "1.2.
|
|
16
|
+
"version": "1.2.2",
|
|
17
17
|
"runtimeHint": "uvx",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
@@ -35,12 +35,11 @@ class RegionConfig:
|
|
|
35
35
|
valid_market_categories: frozenset[str]
|
|
36
36
|
valid_order_markets: frozenset[str]
|
|
37
37
|
valid_instrument_categories: frozenset[str]
|
|
38
|
-
supports_options: bool = True
|
|
39
38
|
# Fundamentals / financials / extended screener tools (capital flow, SEC filings,
|
|
40
39
|
# earnings & dividend calendars, fund data, financial statements, market sectors,
|
|
41
|
-
# high dividend, 52-week high/low).
|
|
42
|
-
supports_fundamentals: bool
|
|
43
|
-
|
|
40
|
+
# high dividend, 52-week high/low).
|
|
41
|
+
supports_fundamentals: bool
|
|
42
|
+
supports_options: bool = True
|
|
44
43
|
# Account class to asset type mapping for this region.
|
|
45
44
|
# Keys: "stock", "option", "futures", "crypto", "event"
|
|
46
45
|
# Values: frozenset of valid account_class values for that asset type.
|
|
@@ -189,6 +188,7 @@ SG_REGION_CONFIG = RegionConfig(
|
|
|
189
188
|
valid_order_markets=frozenset({"US"}),
|
|
190
189
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
191
190
|
supports_options=False,
|
|
191
|
+
supports_fundamentals=True,
|
|
192
192
|
asset_type_account_classes={
|
|
193
193
|
"stock": frozenset({"INDIVIDUAL_CASH", "INDIVIDUAL_MRGN", "INDIVIDUAL_US_MARGIN"}),
|
|
194
194
|
},
|
|
@@ -217,6 +217,7 @@ TH_REGION_CONFIG = RegionConfig(
|
|
|
217
217
|
valid_order_markets=frozenset({"US"}),
|
|
218
218
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
219
219
|
supports_options=False,
|
|
220
|
+
supports_fundamentals=True,
|
|
220
221
|
asset_type_account_classes={
|
|
221
222
|
"stock": frozenset({"INDIVIDUAL_CASH"}),
|
|
222
223
|
},
|
|
@@ -245,6 +246,7 @@ MY_REGION_CONFIG = RegionConfig(
|
|
|
245
246
|
valid_order_markets=frozenset({"US"}),
|
|
246
247
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
247
248
|
supports_options=False,
|
|
249
|
+
supports_fundamentals=True,
|
|
248
250
|
asset_type_account_classes={
|
|
249
251
|
"stock": frozenset({"INDIVIDUAL_CASH", "INDIVIDUAL_MRGN", "INDIVIDUAL_US_MARGIN"}),
|
|
250
252
|
},
|
|
@@ -273,6 +275,7 @@ UK_REGION_CONFIG = RegionConfig(
|
|
|
273
275
|
valid_order_markets=frozenset({"US"}),
|
|
274
276
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
275
277
|
supports_options=False,
|
|
278
|
+
supports_fundamentals=True,
|
|
276
279
|
asset_type_account_classes={
|
|
277
280
|
"stock": frozenset({"INDIVIDUAL_CASH", "STOCK_ISA_CASH"}),
|
|
278
281
|
},
|
|
@@ -301,6 +304,7 @@ MX_REGION_CONFIG = RegionConfig(
|
|
|
301
304
|
valid_order_markets=frozenset({"US"}),
|
|
302
305
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
303
306
|
supports_options=False,
|
|
307
|
+
supports_fundamentals=True,
|
|
304
308
|
asset_type_account_classes={
|
|
305
309
|
"stock": frozenset({"INDIVIDUAL_CASH", "INDIVIDUAL_MRGN", "INDIVIDUAL_US_MARGIN"}),
|
|
306
310
|
},
|
|
@@ -329,6 +333,7 @@ BR_REGION_CONFIG = RegionConfig(
|
|
|
329
333
|
valid_order_markets=frozenset({"US"}),
|
|
330
334
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
331
335
|
supports_options=False,
|
|
336
|
+
supports_fundamentals=True,
|
|
332
337
|
asset_type_account_classes={
|
|
333
338
|
"stock": frozenset({"INDIVIDUAL_CASH", "INDIVIDUAL_MRGN", "INDIVIDUAL_US_MARGIN"}),
|
|
334
339
|
},
|
|
@@ -357,6 +362,7 @@ EU_REGION_CONFIG = RegionConfig(
|
|
|
357
362
|
valid_order_markets=frozenset({"US"}),
|
|
358
363
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
359
364
|
supports_options=False,
|
|
365
|
+
supports_fundamentals=True,
|
|
360
366
|
asset_type_account_classes={
|
|
361
367
|
"stock": frozenset({"INDIVIDUAL_CASH"}),
|
|
362
368
|
},
|
|
@@ -385,6 +391,7 @@ ZA_REGION_CONFIG = RegionConfig(
|
|
|
385
391
|
valid_order_markets=frozenset({"US"}),
|
|
386
392
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
387
393
|
supports_options=False,
|
|
394
|
+
supports_fundamentals=True,
|
|
388
395
|
asset_type_account_classes={
|
|
389
396
|
"stock": frozenset({"INDIVIDUAL_CASH", "INDIVIDUAL_MRGN", "INDIVIDUAL_US_MARGIN"}),
|
|
390
397
|
},
|
|
@@ -413,6 +420,7 @@ AU_REGION_CONFIG = RegionConfig(
|
|
|
413
420
|
valid_order_markets=frozenset({"US"}),
|
|
414
421
|
valid_instrument_categories=frozenset({"US_STOCK", "US_ETF"}),
|
|
415
422
|
supports_options=False,
|
|
423
|
+
supports_fundamentals=True,
|
|
416
424
|
asset_type_account_classes={
|
|
417
425
|
"stock": frozenset({"INDIVIDUAL_CASH", "INDIVIDUAL_MRGN", "INDIVIDUAL_US_MARGIN"}),
|
|
418
426
|
},
|
|
@@ -5,7 +5,7 @@ Provides:
|
|
|
5
5
|
- register_extended_fundamental_tools: stock fundamentals (capital flow, SEC
|
|
6
6
|
filings, earnings/dividend calendar, forecast EPS, industry comparison) and
|
|
7
7
|
fund fundamentals (rating, performance, allocation, holdings, brief, dividends,
|
|
8
|
-
splits, net value, files).
|
|
8
|
+
splits, net value, files). All regions.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Provides:
|
|
4
4
|
- register_screener_tools: gainers/losers, most active (all regions).
|
|
5
5
|
- register_extended_screener_tools: market sectors, market sector detail,
|
|
6
|
-
high dividend, 52-week high/low.
|
|
6
|
+
high dividend, 52-week high/low. All regions.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
from __future__ import annotations
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/instrument.py
RENAMED
|
@@ -57,27 +57,31 @@ def register_instrument_tools(
|
|
|
57
57
|
"Get stock/ETF instrument info.\n"
|
|
58
58
|
"Two modes: (1) Query by symbols — pass symbols, no pagination needed. "
|
|
59
59
|
"(2) Query by category — omit symbols, use page_size/last_instrument_id for pagination.\n"
|
|
60
|
-
"category: US_STOCK,
|
|
60
|
+
"category: US_STOCK, HK_STOCK, JP_STOCK, CN_STOCK.\n"
|
|
61
|
+
"sub_category: optional sub-classification filter within the category "
|
|
62
|
+
"(e.g. COMMON_STOCK, ETF, PREFERRED_STOCK, WARRANT, UNITS, RIGHT).\n"
|
|
61
63
|
"status: OC (Tradable), CO (Liquidate only), NT (Non-Tradable).\n"
|
|
62
|
-
"Returns: symbol, name, instrument_type, exchange."
|
|
64
|
+
"Returns: symbol, name, instrument_type, exchange, sub_category."
|
|
63
65
|
),
|
|
64
66
|
annotations={"readOnlyHint": True},
|
|
65
67
|
)
|
|
66
68
|
async def get_instruments(
|
|
67
69
|
symbols: Optional[str] = None,
|
|
68
70
|
category: str = "US_STOCK",
|
|
71
|
+
sub_category: Optional[str] = None,
|
|
69
72
|
status: Optional[str] = None,
|
|
70
73
|
page_size: int = 1000,
|
|
71
74
|
last_instrument_id: Optional[str] = None,
|
|
72
75
|
) -> str:
|
|
73
76
|
"""Get stock/ETF instrument information. Query by symbols or paginate by category."""
|
|
74
|
-
audit.log_tool_call("get_instruments", {"symbols": symbols, "category": category})
|
|
77
|
+
audit.log_tool_call("get_instruments", {"symbols": symbols, "category": category, "sub_category": sub_category})
|
|
75
78
|
if region_config.region_id in ("jp", "sg") and category not in region_config.valid_instrument_categories:
|
|
76
79
|
return f"Validation error: {region_config.region_id.upper()} region instrument lookup only supports US_STOCK and US_ETF"
|
|
77
80
|
try:
|
|
78
81
|
kwargs = _build_kwargs(
|
|
79
82
|
{"category": category},
|
|
80
83
|
symbols=_split_symbols(symbols) if symbols else None,
|
|
84
|
+
sub_category=sub_category,
|
|
81
85
|
status=status,
|
|
82
86
|
page_size=page_size if page_size != 1000 else None,
|
|
83
87
|
last_instrument_id=last_instrument_id,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/crypto.py
RENAMED
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/event.py
RENAMED
|
File without changes
|
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/option.py
RENAMED
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/stock.py
RENAMED
|
File without changes
|
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/__init__.py
RENAMED
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/account.py
RENAMED
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/assets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/order.py
RENAMED
|
File without changes
|
|
File without changes
|