Longbridge MCP Server

MCP serverMonitoring & ops

Once added, your AI can watch US and Hong Kong markets for you, checking quotes, researching companies, and placing or tracking orders when you ask. It connects to Longbridge, a brokerage covering those markets, with 163 tools that include quotes, options, fundamentals, screening, IPOs, alerts, and automated plans like dollar-cost averaging and grid trading.

Available today. Use it from your connected AI after setup.

After adding it, link your Longbridge account and start with a simple request, like a quote or a fundamentals summary for a stock you follow. Once you are comfortable, set a few alerts or place an order.

Then ask your AI: use Longbridge MCP Server

What your AI can do with it

  • Check quotes across US and Hong Kong markets
  • Review company fundamentals and screen for ideas
  • Place and track orders
  • Look up options and IPOs
  • Set alerts on the markets you follow
  • Automate dollar-cost averaging and grid trading

From the project's README

As published by longbridge/longbridge-mcp in README.md.

Official MCP server for the Longbridge brokerage. 163 tools across real-time quotes, options, order routing, fundamentals, analyst ratings, calendars, IPO, price alerts, DCA plans, grid trading, portfolio analytics and community sharelists — covering US and HK markets. Built with Rust using rmcp and axum.


Add it in one placeThen just ask
ChatGPTSettings → Apps & Connectors → add Longbridge"How's NVDA trading today?" · "Show my HK positions"
ClaudeSettings → Connectors → add Longbridge (web · desktop · mobile)"Compare AAPL and MSFT valuations" · "Any IPOs this week?"

Sign in once with your Longbridge account. Every request runs over the same hosted, OAuth 2.1–secured endpoint documented below — read-only market data plus full account, portfolio, and trading tools, all gated by your own credentials.


Highlights

  • 163 tools, one endpoint — quotes, options, order routing, fundamentals, analyst research, screeners, IPO, alerts, DCA, grid trading and portfolio analytics across US and HK markets.
  • Stateless by design — every request forwards its Bearer token straight to the Longbridge SDK. No sessions, no database, nothing stored server-side.
  • OAuth 2.1, auto-discovered — RFC 9728 protected-resource and RFC 8414 authorization-server metadata; clients complete the flow with no token to paste.
  • Clean, typed responses — snake_case fields, RFC 3339 timestamps, human-readable symbols, and typed response schemas available as MCP resources.

Built in Rust with rmcp and axum.

Filter tool responses with jq

Every tool accepts an optional _jq string in its arguments. The expression runs on the complete returned JSON, after the normal response serialization. The _jq name is reserved for response filtering to avoid conflicts with business parameters. Usage guidance is sent once in the MCP initialize response's instructions; each tool schema declares only the optional parameter name and type. For example:

{
  "name": "quote",
  "arguments": {
    "symbols": ["AAPL.US", "MSFT.US"],
    "_jq": "map({symbol, last_done})"
  }
}

Use .data[:5] to take the first five entries of a data array, .data | map(select(.price > 10)) to select rows, or {total: .total} to project fields. Expressions use the embedded jaq engine's jq-compatible syntax; no separate jq executable is needed.

  • Omit _jq (or pass null) to preserve the original response.
  • One output value is returned directly, multiple values as an array, and no values as []. Scalars and arrays are JSON text; objects also appear in structuredContent, containing only the filtered fields.
  • Plain text responses are available as JSON strings. Multiple content blocks without structured content are available as an array.
  • Tool errors and permission/no-data explanations remain unfiltered.
  • Empty, invalid, or non-string expressions are rejected before the tool runs. If filtering fails at runtime, the response explicitly says the tool already executed. Do not automatically retry writes such as placing an order.
  • Environment access, filesystem imports, and logging filters are unavailable. Output is limited to 10,000 values and 8 MiB; exceeding a limit returns an error rather than a partial result.

Because filters can change the response shape, tools do not advertise a fixed outputSchema. Original typed schemas remain available through resources/list and resources/read at lb://tools/{tool-name}/output-schema for schema-backed tools.

Connect your own client

Longbridge runs a hosted endpoint at https://mcp.longbridge.com — point any MCP client at it and complete OAuth when prompted. Authorization is auto-discovered via RFC 9728; there is no token to paste.

Claude Code

claude mcp add --transport http longbridge https://mcp.longbridge.com

Claude Desktop — add to claude_desktop_config.json, then restart:

{ "mcpServers": { "longbridge": { "url": "https://mcp.longbridge.com" } } }

Cursor · Cline · Windsurf · Zed · other clients — point them at https://mcp.longbridge.com with transport streamable-http.

# Local self-hosted instance (see Self-hosting below)
claude mcp add --transport http longbridge-local http://localhost:8000/mcp

claude mcp list                  # registered servers
claude mcp get longbridge        # config + auth status
claude mcp remove longbridge     # unregister
claude mcp logout longbridge     # re-trigger OAuth after revocation

On first use, the client reads the WWW-Authenticate challenge, fetches /.well-known/oauth-protected-resource (RFC 9728), and opens your browser for the Longbridge OAuth flow. Tokens are cached per session and refreshed automatically.

The 163 tools

Twenty categories spanning market data, trading, research and account management.

CategoryCountCoverage
Quote32Real-time and historical quotes, candlesticks, depth, brokers, options, warrants, watchlists, capital flow, market temperature, short positions, option volume
Fundamental33Financial statements/reports, business segments, institutional views, industry peers/valuation, dividends, EPS forecasts, valuations & valuation comparison, company info/executives, shareholders, corporate actions, operating metrics
Trade14Order submission/cancellation/replacement, positions, balance, executions, cash flow, margin
Market15Market status, industry/top-mover rank, broker holdings, A/H premium, trade statistics, anomalies, short trades/margin, index constituents
DCA9Dollar-cost averaging plan create/update/pause/resume/stop, execution history, statistics, support check
Grid11Grid trading order submit/replace/cancel/suspend/restart, list/detail/trigger-history reads, per-symbol setup info, one-time strategy consent
Sharelist8Community sharelist CRUD, member add/remove/sort, popular lists
IPO7IPO subscriptions, calendar, listed stocks, order detail, profit/loss analysis
Content7News list/detail, discussion topic CRUD and replies
Alert5Price alert CRUD (add, delete, enable, disable, list)
Screener5Stock screener search, indicators, strategy recommendation/management
Portfolio4Exchange rates, profit/loss analysis (summary, detail, realized)
ATM3Bank cards, withdrawal records, deposit records
Macrodata2Macroeconomic indicator list and detail
Search2News search, community topic search
Statement2Account statement listing and export
Calendar1Finance calendar (earnings, dividends, IPOs, macro data, closures)
Quant1Run a quant indicator script against historical K-line data
Authenticate1OAuth code exchange for clients that can't complete a browser redirect
Utility1Current UTC time

Self-hosting

Prefer your own instance? Run the published image:

docker run -p 8443:8443 \
  -v /path/to/certs:/certs:ro \
  ghcr.io/longbridge/longbridge-mcp \
  --bind 0.0.0.0:8443 \
  --base-url https://mcp.example.com \
  --tls-cert /certs/cert.pem \
  --tls-key /certs/key.pem

Set --base-url to your externally reachable URL on any public deployment — it is published in the OAuth metadata clients use to discover the authorization server. It defaults to http://localhost:{port}, which remote clients cannot use.

Or build from source: cargo build --release && ./target/release/longbridge-mcp.

Config lives at ~/.longbridge/mcp/config.json (override the directory with LONGBRIDGE_MCP_CONFIG_DIR). CLI flags take precedence. When tls_cert and tls_key are both set the server runs HTTPS, otherwise HTTP; base_url defaults to https://localhost:{port} with TLS or http://localhost:{port} without.

OptionConfig KeyCLI FlagDefaultDescription
Bind addressbind--bind127.0.0.1:8000HTTP server listen address
Base URLbase_url--base-urlautoPublic base URL for resource metadata
Log directorylog_dir--log-dir(stderr)Directory for rolling log files
TLS certificatetls_cert--tls-cert(none)PEM certificate file for HTTPS
TLS private keytls_key--tls-key(none)PEM private key file for HTTPS
Canary upstreamcanary--canaryfalseTalk to the Longbridge canary environment (*.longbridge.xyz) instead of production. --canary=false forces production even when the config file enables it

Upstream endpoints are fixed by the mode, not by the environment:

Production (default)Canary (--canary)
OpenAPIhttps://openapi.longbridge.comhttps://openapi-global.longbridge.xyz
Quote WebSocketwss://openapi-quote.longbridge.com/v2wss://openapi-global-quote.longbridge.xyz/v2
Trade WebSocketwss://openapi-trade.longbridge.com/v2wss://openapi-global-trade.longbridge.xyz/v2
OAuth / connect pageopenapi.longbridge.com / open.longbridge.comopenapi-global.longbridge.xyz / open.longbridge.xyz

Canary uses the -global gateway, not openapi.longbridge.xyz: only the former is CloudFront-fronted and performs x-dc-region data-center routing, which this server depends on to serve us_- and ap_-prefixed credentials from one process.

All three are set explicitly on the SDK, so LONGBRIDGE_HTTP_URL, LONGBRIDGE_QUOTE_WS_URL, LONGBRIDGE_TRADE_WS_URL, their LONGPORT_* aliases, LONGBRIDGE_REGION, and a .env file are all inert — as is the SDK's geolocation probe, which means the openapi.longbridge.cn access point is never selected. Which data center serves a request is unaffected: that is decided by the x-dc-region header the SDK derives from the credential's us_ / ap_ prefix.

Advanced environment variables — most deployments never touch these; they exist for SDK debugging and edge/global-entry deployments.

VariableDefaultDescription
LONGBRIDGE_MCP_CONFIG_DIR~/.longbridge/mcpConfig file directory
LONGBRIDGE_PUBLIC_HOSTS(none)Comma-separated hostnames accepted from the edge-injected X-Host header; matching requests echo that host in the 401 challenge / RFC 9728 metadata. Unset = X-Host ignored
LONGBRIDGE_GLOBAL_OAUTH_URL(none)Authorization-server URL advertised to requests arriving via an allowlisted X-Host (global single-domain entry). Unset = fall back to the mode's OpenAPI base URL
LONGBRIDGE_MCP_QUOTE_WS_IDLE_TTL_SECS600Idle seconds before a cached quote WebSocket context is evicted
LONGBRIDGE_MCP_QUOTE_WS_MAX_CONTEXTS1024Maximum cached quote WebSocket contexts per server process
LONGBRIDGE_MCP_LOG_PAYLOADS(unset)1 lifts the payload log caps (see below). Never set this in production
LONGBRIDGE_LOG_PATH(none)SDK internal log path. Leave unset in production — the SDK writes unfiltered request/response bodies there

MCP requests and responses carry customer data — cash balances, positions, order history — and upstream SDK frames carry access tokens. None of it belongs in a log file, so the server caps the log targets that would print it, independent of RUST_LOG:

TargetCapWhat it would otherwise print
longbridge_httpcliwarnOpenAPI request and full response bodies (INFO)
longbridge_wscliwarnEvery WebSocket frame, auth token included (INFO)
longbridge::tradewarnOrder push events (INFO)
rmcpinfoDecoded MCP requests and full tool results (DEBUG), raw JSON-RPC frames (TRACE)

So raising verbosity is safe: RUST_LOG=debug (or trace) gives you the server's own logs without leaking customer data. Two switches defeat this, both off by default — LONGBRIDGE_MCP_LOG_PAYLOADS=1 (removes the caps; use only against a test account locally) and LONGBRIDGE_LOG_PATH (makes the SDK write unfiltered bodies to that directory; the server warns at startup when set).

The server expects a Longbridge OAuth access token in Authorization: Bearer <token>. On missing or invalid auth it returns 401 with a WWW-Authenticate header pointing to the protected-resource metadata, which directs clients to the Longbridge OAuth authorization server.

MethodPathDescription
GET/.well-known/oauth-protected-resourceProtected Resource Metadata (RFC 9728)
GET/.well-known/oauth-authorization-serverAuthorization Server Metadata (RFC 8414); advertises direct Longbridge authorize/register and proxied token/revoke endpoints
POST/oauth2/tokenOAuth token proxy; derives x-dc-region from the code/refresh token, defaulting to AP
POST/oauth2/revokeOAuth revocation proxy; derives x-dc-region from the token, defaulting to AP
GET/metricsPrometheus metrics
POST/GET/DELETE/mcpMCP Streamable HTTP endpoint (requires Bearer token)

Prometheus metrics: mcp_tool_calls_total (counter), mcp_tool_call_duration_seconds (histogram), and mcp_tool_call_errors_total (counter) — each labelled by tool_name.

Development

cargo +nightly fmt      # format
cargo clippy            # lint
cargo test              # test

License

Released under the MIT License.

Signals

GitHub stars
14
Forks
3
Last commit
Sep 2026
Advanced
Delivery
mcp MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
Catalog kind
mcp-server
Gateway key
com-longbridge-mcp
Source
github.com/longbridge/longbridge-mcp
Hosted endpoint
https://mcp.longbridge.com