Skip to main content

MCP server for QJ Trader — let an LLM inspect availability, watch Canadian and selected US data, and place simulated orders.

Project description

qjtrader-mcp

For Claude web, mobile, or another hosted assistant, prefer the hosted QJTrader OAuth connector offered inside QJ Gateway. It provides delegated per-user access without putting QJ_CLIENT_SECRET in chat. This package is the local/stdio implementation for Claude Code and controlled local runtimes.

PyPI version Python versions License

Model Context Protocol server for the QJ Trader AI Trading APIs. Point your LLM at your QJ credential and it can watch live Canadian and selected US market data and place simulated orders — no code, no manual API testing.

Built on the official qjtrader Python SDK. Talk to it from Claude Code, Claude Desktop, or any MCP-capable client:

"Check market availability, then compare CA:RY, MX:CRAU26, and US:@ESU26 in the sandbox. Show the books and explain which production permissions would be separate."

Verifiable releases. qjtrader-mcp is published straight from this repository via PyPI Trusted Publishing with signed PEP 740 provenance — no manual uploads, no stored tokens. Before you let an agent install it, you (or the agent) can confirm each release was built by QJTrader/qjtrader-mcp from the Provenance section on PyPI. See SECURITY.md.

Safety model — AI trades simulated by default

Order-mutating tools (place_order, cancel_order, replace_order, cancel_all) run against a sandbox credential by default and return simulated fills. A live credential is refused unless you explicitly opt in. The server never sniffs this off the wire (the protocol doesn't expose it) — you declare it:

QJ_ENV Read tools (quotes/depth/status) Order tools
sandbox ✅ simulated
live ⛔ unless QJ_MCP_ALLOW_LIVE=1
(unset) ⛔ (fail-safe: unknown is treated as live)

Every tool result is prefixed with an environment tag ([SANDBOX] / [LIVE — REAL MONEY] / [ENV UNKNOWN]), and order quantity is capped client-side by QJ_MCP_MAX_QTY (default 25).

Install

Get a free sandbox credential (no approval) at gateway.qjtrader.ai.

The zero-install path is:

uvx qjtrader-mcp        # or: pipx run qjtrader-mcp

For local development against the SDK checkout:

# from the qjtrader-mcp/ directory, with the qjtrader-python sibling checked out:
uv sync && uv run qjtrader-mcp          # uv resolves qjtrader from ../qjtrader-python
# — or with pip —
pip install -e ../qjtrader-python -e .
qjtrader-mcp

Configure your client

Claude Code

claude mcp add qjtrader -- uvx qjtrader-mcp
# then set the credential + environment for the server:
claude mcp add qjtrader \
  -e QJ_CLIENT_ID=your-client-id \
  -e QJ_CLIENT_SECRET=your-client-secret \
  -e QJ_ENV=sandbox \
  -- uvx qjtrader-mcp

Claude Desktop / generic stdio

Add to your MCP config (claude_desktop_config.json or equivalent):

{
  "mcpServers": {
    "qjtrader": {
      "command": "uvx",
      "args": ["qjtrader-mcp"],
      "env": {
        "QJ_CLIENT_ID": "your-client-id",
        "QJ_CLIENT_SECRET": "your-client-secret",
        "QJ_ENV": "sandbox"
      }
    }
  }
}

The console's "Connect your AI" panel generates these blocks pre-filled, including QJ_ENV=sandbox.

Tools

Tool Kind Description
session_info read Environment, whether order actions are allowed, endpoints, authenticated user. Call first.
market_availability read, offline Product-by-product sandbox vs production data/order support, verified examples, and known gaps. Call before assuming a product has depth or order authority.
get_quote read Top-of-book (best bid/ask) for one or more symbols
get_depth read Level-2 order book for a symbol (venue-tagged on consolidated books)
watch read Sample the live stream for a bounded window; returns a digest + last messages
list_orders read Open orders + session state
get_positions read Broker-truth positions (broker + fill = total), risk envelope + admserv hard caps, capital-required, order plane
place_order write Submit a limit order and wait for a terminal state
cancel_order write Cancel a working order by cid
replace_order write Amend a working order's qty/price
cancel_all write Cancel every working order (kill switch)
explain_symbol util Parse/explain a symbol (prefix + root + venue), offline
read_events read Order journal — cross-order event history; post-trade analysis & strategy debugging
get_history read Historical OHLCV bars (1s/1m); sandbox = deterministic synthetic days
get_stats read Server digest for a symbol: VWAP, spread, volume, realized vol (a digest, not a dump)
get_chain read Options chain snapshot for an underlying/expiry (latest or historical)
compare read Rank a digest metric (vwap/volume/realized_vol/spread_mean) across symbols

The read_*/get_* research tools make the LLM a quant developer: analyse the market and debug the strategy it wrote, without touching the production order path.

Configuration reference

Env var Purpose Default
QJ_CLIENT_ID / QJ_CLIENT_SECRET credential — (required)
QJ_ENV sandbox | live — declares the environment unset → treated as live
QJ_MCP_ALLOW_LIVE set 1 to authorize live order actions off
QJ_MCP_MAX_QTY client-side max order quantity 25
QJ_DATA_HOST / QJ_ORDERS_HOST endpoint overrides public QJ hosts
QJ_CA_FILE pin a CA/cert (pilot order endpoint) none

License

Apache-2.0. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qjtrader_mcp-0.3.4.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qjtrader_mcp-0.3.4-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file qjtrader_mcp-0.3.4.tar.gz.

File metadata

  • Download URL: qjtrader_mcp-0.3.4.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qjtrader_mcp-0.3.4.tar.gz
Algorithm Hash digest
SHA256 2ec14dd6df259945b529560403df3e426f51ce218370b11eddb9c0ae8ceede8a
MD5 c991ced59c4fb8c48aa6d0bf300e11f1
BLAKE2b-256 7d974d2cc18d3fdb2f4bfa73259571710413acf476bed5fc279565ccc77d7d3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for qjtrader_mcp-0.3.4.tar.gz:

Publisher: publish.yml on QJTrader/qjtrader-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qjtrader_mcp-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: qjtrader_mcp-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 20.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for qjtrader_mcp-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 84de67a5bcfe5954a8ce94017468a540011408de91fe1767747827d6e68c9a3d
MD5 7e92d737ccf59b07114aee49e0d6ac6b
BLAKE2b-256 2cfa22158acf69ce8196d4131f16cd0b302c3de11c0f8fac5dedd1b4e48496a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for qjtrader_mcp-0.3.4-py3-none-any.whl:

Publisher: publish.yml on QJTrader/qjtrader-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page