Remote MCP
Remote MCP is a hosted MCP service provided by Tiger OpenAPI. Add the service URL to any AI tool that supports MCP, complete OAuth2 authorization with your Tiger account, and then query quotes, accounts, and orders in natural language.
No SDK installation, local process, or Tiger ID and private key configuration is required. Which accounts the AI tool can access and what it can do are determined by the accounts and permission scopes selected during authorization.
Remote MCP uses OAuth2 authorization and currently supports individual users only.
Service URL
https://mcp.tigerfintech.com/mcp
Enter the full URL without a trailing slash.
Prerequisites
- Tiger OpenAPI is activated, and the live or paper trading accounts to be authorized are bound in the Developer Center.
- The AI tool supports remote MCP (Streamable HTTP and OAuth 2.1).
- Market data is subject to the OpenAPI market data permissions already attached to the account. Real-time quotes, trade ticks, and market depth require a separately purchased API market data permission, which is independent of the permissions in the Tiger Trade app; the available range of candlestick bars (K-line) is determined by the historical market data quota tier. See Market data permissions and limits for details.
Setup
In your client, add a remote MCP server, select HTTP / Streamable HTTP as the transport, and enter https://mcp.tigerfintech.com/mcp as the URL. After adding it, connect to the service and follow the prompts to sign in and authorize in your browser.
Claude Code
Run the following command in a terminal to add the remote MCP server:
claude mcp add --transport http tiger-mcp https://mcp.tigerfintech.com/mcpBy default, the command adds the server to the current project. To make it available in all projects, append --scope user.
After adding it, run /mcp in Claude Code, select tiger-mcp, and follow the prompts to complete authorization.
Claude Desktop
- Open Settings → Connectors.
- Click Add custom connector.
- Enter
Tiger MCPas the name andhttps://mcp.tigerfintech.com/mcpas the URL. - After saving, sign in to your Tiger account and complete authorization as prompted.
Custom connectors require the corresponding subscription plan; refer to the current version of your client for details.
Codex
Run the following command in a terminal to add the remote MCP server:
codex mcp add tiger-mcp --url https://mcp.tigerfintech.com/mcpThen complete OAuth sign-in:
codex mcp login tiger-mcpYour browser opens the authorization page automatically. Run codex mcp list to confirm the server has been added, and run /mcp in Codex to view the connection status.
Cursor
- Open Cursor settings and go to the MCP page.
- Add a remote MCP server and select HTTP / Streamable HTTP as the transport.
- Enter
Tiger MCPas the name andhttps://mcp.tigerfintech.com/mcpas the URL. - After saving, click Connect, sign in to your Tiger account in the browser, and complete authorization.
Other clients
Add an MCP server of type remote / HTTP / Streamable HTTP, enter the service URL, and complete authorization. Clients that only support local processes (stdio) cannot use this service.
Authorization flow
On first connection, the client automatically opens a browser:
- Sign in to your Tiger account.
- Select the accounts this authorization grants access to. Live and paper trading accounts can be selected separately (multiple each), and only the selected accounts are authorized.
- Select the capability scopes (scope) this authorization grants. Nothing is selected by default; you must choose actively.
- Confirm the authorization.
After authorization, the browser redirects back to the client; no manual token copying is required.
- A single authorization lasts up to 15 days; you need to reauthorize after it expires.
- To revoke authorization, use authorization management in the Developer Center.
Permission scopes
| Scope | Grants | Capabilities |
|---|---|---|
api.basic:read | Basic data, including API permissions and quotas | Determines whether stock quotes return real-time data |
api.quote:read | Market data | Symbol search, quotes, candlestick bars, timeline, market depth, trade ticks, option chain, screener, and more |
api.account:read | Account information | Account assets, positions, historical asset performance |
api.trade:read | Trade queries | Trade contracts, orders, transactions |
get_accountsonly requires eitherapi.account:readorapi.trade:read.- Stock quotes return real-time data only when
api.quote:read,api.basic:read, and the real-time market data permission are all present; otherwise they return 15-minute delayed data. Each quote indicates its data type viaquote_type.
Tools
The tool list may change with server-side configuration; integrators should rely on the tool list their client retrieves. Click a tool name to view its parameters.
Trading and additional tools will be rolled out over time.
All of the following tools require api.quote:read.
search_symbolsSearch symbols
Purpose: Search for standard symbols by name, product, or code; returns symbols only, not prices.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Name, product, or code keyword |
limit | integer | No | Maximum number of results, default 10, range 1–30 |
get_quoteGet quotes
Purpose: Query the latest quotes for one or more symbols.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbols | string | Yes | Comma-separated standard symbols, such as AAPL, 00700, CL2509, BTC.USD; up to 50 symbols of the same type and market |
sec_type | enum | No | STK/OPT/FUT/CC, default STK |
include_hour_trading | boolean | No | Stocks only; whether to include pre-market and after-hours prices, default true |
limit | integer | No | Maximum number of results, default 20, range 1–50 |
get_barsGet candlestick bars
Purpose: Query historical candlestick bars (OHLCV) for a single symbol.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Standard symbol |
period | enum | No | day/week/month/year/1min/5min/15min/30min/60min, default day |
sec_type | enum | No | STK/OPT/FUT/CC, default STK |
begin_time | integer | No | Start time, Unix milliseconds |
end_time | integer | No | End time, Unix milliseconds, default is the current time |
date | string | No | yyyyMMdd, stock minute bars only; cannot be used together with begin_time, end_time, or limit |
limit | integer | No | Maximum number of results, default 100, range 1–500 |
get_timelineGet timeline
Purpose: Query the timeline price series for the current day or a specified date.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Standard symbol |
sec_type | enum | No | STK/OPT/CC, default STK |
date | string | No | yyyyMMdd, stocks only; mutually exclusive with period and begin_time |
period | enum | No | day/day5, default day; not supported for options |
trade_session | enum | No | PreMarket/Regular/AfterHours/All, default All; stocks only |
begin_time | integer | No | Unix milliseconds, current-day timeline for stocks and crypto only |
get_depthGet market depth
Purpose: Query buy and sell market depth orders.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Standard symbol |
sec_type | enum | No | STK/OPT/FUT, default STK |
market | enum | No | US/HK/CN; stocks only |
session | enum | No | Regular/PreMarket/AfterHours/All; stocks only |
lang | enum | No | zh_CN/zh_TW/en_US; futures only, default zh_CN |
get_ticksGet trade ticks
Purpose: Query trade tick details.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Standard symbol |
sec_type | enum | No | STK/OPT/FUT, default STK |
trade_session | enum | No | PreMarket/Regular/AfterHours/All, default Regular; stocks only |
lang | enum | No | zh_CN/zh_TW/en_US; stocks only, default zh_CN |
begin_index | integer | No | Start of the index range; must be provided together with end_index |
end_index | integer | No | End of the index range, exclusive |
limit | integer | No | Maximum number of results, default 50, range 1–200 |
get_market_statusGet market status
Purpose: Query the current trading status of a market.
| Parameter | Type | Required | Description |
|---|---|---|---|
market | enum | No | ALL/US/HK/CN/SG/AU/NZ/UK, default ALL |
lang | enum | No | zh_CN/zh_TW/en_US |
get_contractGet quote contracts
Purpose: Query quote contracts for options, HK warrants, or CBBCs.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Underlying stock code |
sec_type | enum | No | OPT/WAR/IOPT, default OPT |
expiry | string | No | yyyyMMdd, 8 digits; required for options |
lang | enum | No | zh_CN/zh_TW/en_US; mutually exclusive with expiry |
get_hk_option_symbolsGet HK option symbols
Purpose: Query the mapping between HK stock codes and HK option underlying codes.
| Parameter | Type | Required | Description |
|---|---|---|---|
underlying | string | No | 5-digit zero-padded HK stock code, such as 00700; when omitted, returns the mapping list, up to 50 rows |
get_stock_brokerGet HK broker seats
Purpose: Query buy and sell broker seats for HK stocks.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | 5-digit zero-padded HK stock code |
limit | integer | No | Number of levels per side, default 40, range 1–60 |
get_future_exchangesGet futures exchanges
Purpose: Query exchanges that support the futures contract discovery API.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum number of results, default 50, range 1–100 |
lang | enum | No | zh_CN/zh_TW/en_US |
get_future_contractsGet futures contracts
Purpose: Query futures contract codes on a specified exchange.
| Parameter | Type | Required | Description |
|---|---|---|---|
exchange_code | string | Yes | Exchange code, from get_future_exchanges |
lang | enum | No | zh_CN/zh_TW/en_US |
limit | integer | No | Maximum number of results, default 50, range 1–200 |
include_untradable | boolean | No | Whether to include contracts that are currently not tradable, default false |
get_crypto_symbolsGet crypto symbols
Purpose: Query supported crypto codes.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum number of results, default 200, range 1–500 |
get_capital_flowGet capital flow
Purpose: Query net capital inflow trends and large, medium, and small order distribution for stocks.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Stock code |
period | enum | No | intraday/day/week/month/quarter/6month/year, default day; intraday is not supported for A-shares |
market | enum | No | US/HK/CN; inferred from the symbol when omitted |
limit | integer | No | Maximum number of results, default 20, range 1–200 |
get_option_expirationsGet option expirations
Purpose: Query the option expiration dates of a symbol.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Underlying stock code |
market | enum | No | US/HK, default US |
get_option_chainGet option chain
Purpose: Query the option chain for a specified expiration date.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Underlying stock code |
expiry | string | Yes | yyyy-MM-dd, from get_option_expirations |
market | enum | No | US/HK, default US |
moneyness_range | integer | No | Number of strike levels to keep above and below at-the-money, default 10, range 1–50 |
right | enum | No | ALL/CALL/PUT, default ALL |
describe_screener_fieldsDescribe screener fields
Purpose: Query the filter fields and tag values supported by the screener.
| Parameter | Type | Required | Description |
|---|---|---|---|
market | enum | No | US/HK/SG/AU; required when querying dynamic tag values such as industries and concepts |
category | enum | No | base/accumulate/financial/tag/period |
limit | integer | No | Maximum number of results, default 60, range 1–200 |
tag_fields | array | No | MultiTagField identifiers whose tag values should be expanded |
keyword | string | No | Search by field name, API name, or Chinese/English alias |
screen_stocksScreen stocks
Purpose: Screen stocks and ETFs by screener conditions.
| Parameter | Type | Required | Description |
|---|---|---|---|
market | enum | Yes | US/HK/SG/AU |
base_filters | array | No | Basic metric ranges. Each item includes field (string, required), min (number), max (number), and no_filter (boolean) |
accumulate_filters | array | No | Accumulated metric ranges. Each item includes field (string, required), period (string), min, max, and no_filter |
financial_filters | array | No | Financial metric ranges. Each item includes field (string, required), min, max, and no_filter |
tag_filters | array | No | Tag conditions. Each item includes field (string, required), tags (array of string), and no_filter |
sort | object | No | Sorting. Includes field (required), field_type (required, stock/accumulate/financial/tag), direction (required, asc/desc), and period (required for accumulated metrics) |
page | integer | No | Page number, starting from 0, default 0 |
page_size | integer | No | Number of results per page, default 50, range 1–200 |
cursor_id | string | No | Pagination cursor; pass it back unchanged |
Fields such as market value use absolute currency units, for example a US$200 billion total market value is passed as 200000000000. Numeric ranges are inclusive, and financial ratios use decimals, for example 10% is passed as 0.1. Results include ETFs by default; to keep only common stocks, add MultiTagField_Type with a tag value of 0.
get_accounts requires api.account:read or api.trade:read; assets, positions, and historical asset performance require api.account:read; orders, transactions, and trade contracts require api.trade:read.
get_accountsGet authorized accounts
Purpose: List the account numbers and account types available within this authorization.
No parameters. When there is exactly one authorized account, also returns default_account.
get_assetsGet account assets
Purpose: Query the current account asset snapshot, including available balance, buying power, and more.
| Parameter | Type | Required | Description |
|---|---|---|---|
account | string | No | Authorized account number; required when multiple accounts exist |
base_currency | enum | No | ALL/USD/HKD/CNH/SGD/AUD/JPY/EUR/GBP/CAD/NZD; no FX conversion is performed |
consolidated | boolean | No | Whether to return consolidated assets, default true; only supported for some account types |
get_positionsGet positions
Purpose: Query the current positions of an account.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | No | Symbol code |
market | enum | No | US/HK/CN |
sec_type | enum | No | STK/OPT/FUT/FUND, default STK |
account | string | No | Authorized account number |
limit | integer | No | Maximum number of results, default 50, range 1–200 |
get_ordersGet orders
Purpose: Query a single order by order ID, or list account orders by conditions.
| Parameter | Type | Required | Description |
|---|---|---|---|
account | string | No | Authorized account number |
order_scope | enum | No | ALL/FILLED/ACTIVE/INACTIVE, default ALL |
order_id | integer | No | Global order ID; in single-order mode, cannot be combined with list filter parameters |
symbol | string | No | Symbol code |
market | enum | No | US/HK/CN/ALL |
sec_type | enum | No | STK/OPT/FUT/FUND |
status | string | No | Comma-separated exact statuses; only available when order_scope=ALL |
start_time | integer | No | Start time, Unix milliseconds |
end_time | integer | No | End time, Unix milliseconds |
is_brief | boolean | No | Whether to return brief information, default false; only supported for some accounts |
limit | integer | No | Number of results per page, default 20, range 1–100 |
page_token | string | No | The next_page_token returned from the previous page |
List mode queries all orders by default, with a time range of the most recent 7 days and 20 results per page.
get_transactionsGet transactions
Purpose: Query transaction details.
| Parameter | Type | Required | Description |
|---|---|---|---|
account | string | No | Authorized account number |
order_id | integer | No | Query transactions by order; in this case only the account, order ID, count, and cursor parameters are accepted |
symbol | string | No | Provide when querying transactions by symbol; must be used together with sec_type |
sec_type | enum | No | STK/OPT/FUT/FUND |
expiry | string | No | Option expiration date |
strike | number | No | Option strike price |
put_call | enum | No | PUT/CALL |
start_time | integer | No | Start time, Unix milliseconds |
end_time | integer | No | End time, Unix milliseconds |
limit | integer | No | Number of results per page, default 20, range 1–100 |
page_token | string | No | The next_page_token returned from the previous page |
Either order_id or symbol + sec_type must be provided. When querying options by symbol, expiry, strike, and put_call must also be provided. The default time range is the most recent 7 days.
get_analytics_assetGet historical asset performance
Purpose: Query an account's historical asset performance and daily asset records.
| Parameter | Type | Required | Description |
|---|---|---|---|
account | string | No | Authorized account number; only supported for some account types |
start_date | string | No | yyyy-MM-dd |
end_date | string | No | yyyy-MM-dd |
segment_type | enum | No | SEC/FUT/ALL |
currency | enum | No | ALL/USD/HKD/CNH/SGD/AUD/JPY/EUR/GBP/CAD/NZD; no FX conversion is performed |
The default is the most recent 30 days.
get_trade_contractGet trade contract
Purpose: Query the account-level trading attributes of a contract, such as shares per lot, minimum price increment, margin, and short-sell eligibility.
| Parameter | Type | Required | Description |
|---|---|---|---|
symbol | string | Yes | Stock code, option underlying code, or futures contract code |
sec_type | enum | No | STK/OPT/FUT, default STK |
expiry | string | No | Option expiration date; required for options |
strike | number | No | Option strike price; required for options |
put_call | enum | No | PUT/CALL; required for options |
account | string | No | Authorized account number |
Rules for using the account parameter:
- If
accountis omitted, the account is used automatically only when there is exactly one authorized account. - If no account is authorized, or multiple accounts are authorized, call
get_accountsfirst and then specify the account. - Passing an unauthorized account returns an error; the server does not fall back to another account.
Usage examples
After authorization, you can make requests in natural language:
- "Check the latest prices of AAPL and NVDA."
- "Pull the daily candlestick bars for 00700 over the last 60 trading days."
- "Show me which stocks my US account currently holds."
- "List my unfilled orders from the last 7 days."
Updated about 6 hours ago
