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.
Files changed (67) hide show
  1. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/.github/workflows/pypi-ci.yml +1 -1
  2. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/PKG-INFO +39 -41
  3. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/README.md +36 -38
  4. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/pyproject.toml +2 -2
  5. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/server.json +2 -2
  6. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/__init__.py +1 -1
  7. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/region_config.py +12 -4
  8. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/financial.py +1 -1
  9. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/fundamental.py +1 -1
  10. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/screener.py +1 -1
  11. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/instrument.py +7 -3
  12. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/.env.example +0 -0
  13. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/.gitignore +0 -0
  14. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/DISCLAIMER.md +0 -0
  15. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/LICENSE +0 -0
  16. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/.mcpbignore +0 -0
  17. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/build.sh +0 -0
  18. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/build_manifest.py +0 -0
  19. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/mcpb/src/server.py +0 -0
  20. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/__init__.py +0 -0
  21. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_account_tools.py +0 -0
  22. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_audit.py +0 -0
  23. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_cli.py +0 -0
  24. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_config.py +0 -0
  25. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_errors.py +0 -0
  26. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_formatters.py +0 -0
  27. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_fundamental_screener_registration.py +0 -0
  28. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_fundamental_tools.py +0 -0
  29. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_guards.py +0 -0
  30. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_instrument_tools.py +0 -0
  31. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_market_data_tools.py +0 -0
  32. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_audit.py +0 -0
  33. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_config.py +0 -0
  34. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_formatters.py +0 -0
  35. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_guards.py +0 -0
  36. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_sdk.py +0 -0
  37. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_property_server.py +0 -0
  38. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_screener_tools.py +0 -0
  39. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_sdk_client.py +0 -0
  40. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/tests/test_stock_order_tools.py +0 -0
  41. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/__main__.py +0 -0
  42. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/audit.py +0 -0
  43. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/cli.py +0 -0
  44. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/config.py +0 -0
  45. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/constants.py +0 -0
  46. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/errors.py +0 -0
  47. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/formatters.py +0 -0
  48. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/guards.py +0 -0
  49. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/sdk_client.py +0 -0
  50. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/server.py +0 -0
  51. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/__init__.py +0 -0
  52. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/__init__.py +0 -0
  53. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/crypto.py +0 -0
  54. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/event.py +0 -0
  55. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/futures.py +0 -0
  56. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/option.py +0 -0
  57. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/stock.py +0 -0
  58. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/market_data/watchlist.py +0 -0
  59. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/__init__.py +0 -0
  60. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/account.py +0 -0
  61. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/assets.py +0 -0
  62. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/crypto_order.py +0 -0
  63. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/event_order.py +0 -0
  64. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/futures_order.py +0 -0
  65. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/option_order.py +0 -0
  66. {webull_openapi_mcp-1.2.1 → webull_openapi_mcp-1.2.2}/webull_openapi_mcp/tools/trading/order.py +0 -0
  67. {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@27b31702a0e7fc50959f5ad993c78deac1bdfc29
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.4
1
+ Metadata-Version: 2.5
2
2
  Name: webull-openapi-mcp
3
- Version: 1.2.1
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.16
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) (US/HK/JP only)
59
- - **Financial Statements** — Financial alert, indicators, income statement, balance sheet, and cash flow (US/HK/JP only)
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 | 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` | 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` | US, HK, JP |
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` | US, HK, JP |
354
- | **Financial Statements** | `get_financial_alert`, `get_financial_indicators`, `get_income_statement`, `get_balance_sheet`, `get_cash_flow` | US, HK, JP |
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 | US | HK | JP | SG | TH | MY | UK | MX | BR | EU | ZA | AU |
375
- |---------|----|----|----|----|----|----|-----|----|----|----|----|-----|
376
- | Stock Trading | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
377
- | Option Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
378
- | Futures Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
379
- | Crypto Trading | Yes | No | No | No | No | No | No | No | No | No | No | No |
380
- | Event Contracts | Yes | No | No | No | No | No | No | No | No | No | No | No |
381
- | Combo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
382
- | Option Strategies | Yes | No | No | No | No | No | No | No | No | No | No | No |
383
- | Algo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
384
- | Screener (Gainers/Losers/Active) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
385
- | Screener (Sectors/Dividend/52W) | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No |
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 | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No |
389
- | Financial Statements | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No |
390
- | NOII (Auction Imbalance) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
391
- | Markets | US | US, HK, CN | US, JP | US | US | US | US | US | US | US | US | US |
392
- | 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 |
393
- | 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 |
394
- | 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 |
395
- | 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 |
396
- | 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 | — | — | — | — | — | — | — | — | — |
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 US, HK, and JP regions; supported `category` values vary by endpoint (commonly `US_STOCK`, `HK_STOCK`, `CN_STOCK`, `JP_STOCK`). Watchlist supports US stocks and HK stocks.
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) (US/HK/JP only)
29
- - **Financial Statements** — Financial alert, indicators, income statement, balance sheet, and cash flow (US/HK/JP only)
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 | 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` | 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` | US, HK, JP |
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` | US, HK, JP |
324
- | **Financial Statements** | `get_financial_alert`, `get_financial_indicators`, `get_income_statement`, `get_balance_sheet`, `get_cash_flow` | US, HK, JP |
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 | US | HK | JP | SG | TH | MY | UK | MX | BR | EU | ZA | AU |
345
- |---------|----|----|----|----|----|----|-----|----|----|----|----|-----|
346
- | Stock Trading | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
347
- | Option Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
348
- | Futures Trading | Yes | Yes | No | No | No | No | No | No | No | No | No | No |
349
- | Crypto Trading | Yes | No | No | No | No | No | No | No | No | No | No | No |
350
- | Event Contracts | Yes | No | No | No | No | No | No | No | No | No | No | No |
351
- | Combo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
352
- | Option Strategies | Yes | No | No | No | No | No | No | No | No | No | No | No |
353
- | Algo Orders | Yes | No | No | No | No | No | No | No | No | No | No | No |
354
- | Screener (Gainers/Losers/Active) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
355
- | Screener (Sectors/Dividend/52W) | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No |
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 | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No |
359
- | Financial Statements | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No |
360
- | NOII (Auction Imbalance) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
361
- | Markets | US | US, HK, CN | US, JP | US | US | US | US | US | US | US | US | US |
362
- | 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 |
363
- | 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 |
364
- | 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 |
365
- | 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 |
366
- | 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 | — | — | — | — | — | — | — | — | — |
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 US, HK, and JP regions; supported `category` values vary by endpoint (commonly `US_STOCK`, `HK_STOCK`, `CN_STOCK`, `JP_STOCK`). Watchlist supports US stocks and HK stocks.
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.1"
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.16",
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.0",
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.0",
16
+ "version": "1.2.2",
17
17
  "runtimeHint": "uvx",
18
18
  "transport": {
19
19
  "type": "stdio"
@@ -1,3 +1,3 @@
1
1
  """Webull OpenAPI MCP Server - AI assistant integration for Webull OpenAPI."""
2
2
 
3
- __version__ = "1.2.1"
3
+ __version__ = "1.2.2"
@@ -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). Currently only US / HK / JP markets.
42
- supports_fundamentals: bool = False
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
  },
@@ -1,7 +1,7 @@
1
1
  """Financial statement tools for Webull MCP Server.
2
2
 
3
3
  Provides: get_financial_alert, get_financial_indicators, get_income_statement,
4
- get_balance_sheet, get_cash_flow.
4
+ get_balance_sheet, get_cash_flow. All regions.
5
5
  """
6
6
 
7
7
  from __future__ import annotations
@@ -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). US / HK / JP only.
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. US / HK / JP only.
6
+ high dividend, 52-week high/low. All regions.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
@@ -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, US_ETF, HK_STOCK, CN_STOCK.\n"
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,