Skip to main content

trading-mcp-server

A local MCP (Model Context Protocol) server that exposes safe trading tools for AI agents such as Claude Code and Copilot CLI. The agent does the reasoning; this server provides market data, technical indicators, news, sizing helpers, a paper-trading engine, backtesting, and a guarded broker layer (Angel One SmartAPI, NSE).

Execution model — one switch, three modes (EXECUTION_MODE):

  • notifyplace_order returns a manual-placement recommendation (and a Telegram alert if configured). Nothing is executed.
  • paperplace_order fills in a simulated paper account. (default)
  • liveplace_order places a real order — but only when ALLOW_LIVE_TRADING=true (a human-only switch in .env; no tool can change it). With it off, live orders degrade to notify.

Safety guarantees:

  • The broker is reached only when EXECUTION_MODE=live and ALLOW_LIVE_TRADING=true.
  • Delivery (CNC) sell is never sent to the broker in any mode — it always degrades to a notify recommendation so the user can verify holdings and sell manually.
  • Every order decision is appended to an audit log (storage/trade_logs.jsonl).

Where trading policy lives: risk limits, intraday/swing selection, and position sizing are not in the server — they live in a client-side trading_config.yaml that your agent reads and enforces. The server only validates that orders are structurally well-formed. See docs/CLIENT_INTEGRATION.md.

Nothing produced by this server is financial advice.

Installation

# local development (editable, from a sibling checkout)
pip install -e ../trading-mcp-server

# with broker + scanner extras (needed for live data / Chartink watchlist)
pip install -e "../trading-mcp-server[broker,scanners]"

# future, once published to PyPI
pip install trading-mcp-server

Requires Python 3.10+.

Running the server

The server speaks MCP over stdio:

trading-mcp-server
# or
python -m trading_mcp_server.server

It resolves its configuration and state from a home directory:

  1. TRADING_MCP_HOME environment variable, if set
  2. otherwise the current working directory

There it reads <home>/.env (execution mode, the live master switch, broker credentials) and writes <home>/storage/ (paper-trading state, audit log). This keeps the package independent of any repo path — point TRADING_MCP_HOME at your trading project.

Register in a client (e.g. .mcp.json for Claude Code):

{
  "mcpServers": {
    "trading-agent": {
      "command": "trading-mcp-server",
      "env": { "TRADING_MCP_HOME": "C:\\path\\to\\your\\trading-repo" }
    }
  }
}

What it exposes

Tools (by category)

Category Tools
Config get_trading_config, get_execution_mode, set_execution_mode, update_trading_config
Market data fetch_live_price, fetch_historical_data, fetch_market_status, fetch_symbol_metadata, fetch_watchlist
Indicators calculate_sma/ema/rsi/macd/bollinger_bands/atr/volume_analysis, detect_support_resistance, detect_trend, get_indicator_snapshot
News fetch_latest_news, fetch_market_news, get_market_sentiment, get_sector_sentiment, fetch_news_articles, analyze_news_sentiment
Portfolio fetch_portfolio, fetch_order_history, calculate_portfolio_exposure, calculate_unrealized_pnl
Risk (calculators) calculate_position_size, calculate_stop_loss, calculate_target_price, check_max_daily_loss, check_portfolio_concentration
Strategy evaluate_intraday_trade_setup, evaluate_swing_trade_setup, compare_multiple_symbols, scan_watchlist_for_intraday_opportunities, scan_watchlist_for_swing_opportunities, run_strategy_backtest
Paper trading close_paper_position, fetch_paper_trades, fetch_paper_portfolio, calculate_paper_trading_performance, generate_paper_trading_report, reset_paper_account
Order execution place_order (routes by EXECUTION_MODE)
Broker (read) fetch_broker_funds, fetch_broker_positions, fetch_broker_holdings, fetch_broker_order_status
Notifications send_notification (Telegram+Discord fan-out), send_telegram_notification, send_discord_notification, send_trade_alert

To open a position use place_order (it routes to the paper engine in paper mode, the broker in live mode, or a recommendation in notify mode). Risk policy is enforced by your agent via trading_config.yaml — see docs/CLIENT_INTEGRATION.md.

Resources

  • trading://config — current configuration (secrets redacted)
  • trading://safety-rules — the safety rules the server enforces

Prompts

  • intraday_trade_analysis(symbol) — disciplined intraday workflow
  • swing_trade_analysis(symbol) — swing/delivery workflow
  • paper_trading_review() — profitability review workflow

Backtest strategies built in: ma_crossover, rsi_reversal, macd_trend, breakout_volume.

Package structure

src/trading_mcp_server/
├── server.py        # FastMCP entry point (create_server, main)
├── config.py        # .env-backed TradingConfig — single source of truth
├── tools/           # MCP tool modules (one per category, register(mcp))
├── resources/       # MCP resources
├── prompts/         # MCP prompts
├── services/        # data provider, indicators, risk, validation, paper engine, broker safety layer
├── broker/          # SmartAPI adapter — the ONLY module talking to the real broker
├── backtest/        # engine + built-in strategies
└── utils/           # logging/audit, market hours, instrument lookup
tests/               # pytest suite (config, safety, paper engine, indicators, backtest)

Development

pip install -e ".[dev]"
python -m pytest tests -q          # run tests (no network, no broker needed)
python -m trading_mcp_server.server  # run server from source

Configuration reference

The server reads only a few execution switches from <home>/.env (template: examples/.env.example):

Key Values Notes
EXECUTION_MODE notify | paper | live the one switch; default paper
ALLOW_LIVE_TRADING true | false human-only; live orders place only when true
NOTIFY_PAPER_ORDERS true | false Telegram alert on paper fills
PAPER_STARTING_CAPITAL number paper engine capital
BROKER_* secrets Angel One credentials (live + live data)
NEWS_API_KEY secret optional news search
TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID secrets Telegram notifications
DISCORD_TOKEN/DISCORD_CHANNEL_ID secrets Discord notifications

Trading policy (risk limits, intraday/swing, sizing) is not here — it lives in a client-side trading_config.yaml read by your agent. Template: examples/trading_config.example.yaml. Full guide: docs/CLIENT_INTEGRATION.md.

Publishing to PyPI (future)

  1. Bump version in pyproject.toml and src/trading_mcp_server/__init__.py.
  2. python -m build (requires pip install build).
  3. python -m twine upload dist/* (requires a PyPI account + API token).
  4. Consumers then switch from pip install -e ../trading-mcp-server to pip install trading-mcp-server — no other change needed.

License

MIT

Download files

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

Source Distribution

trading_mcp_server-0.2.1.tar.gz (55.7 kB view details)

Uploaded Source

Built Distribution

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

trading_mcp_server-0.2.1-py3-none-any.whl (56.2 kB view details)

Uploaded Python 3

File details

Details for the file trading_mcp_server-0.2.1.tar.gz.

File metadata

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

File hashes

Hashes for trading_mcp_server-0.2.1.tar.gz
Algorithm Hash digest
SHA256 f3c876ec82358dd9f1069313075c0e46d8adb0c616f5c00ed01fc4f3fed7dc9b
MD5 15dcf5c01ff3fd26dfd45b07b11cf108
BLAKE2b-256 c6857c6423f89cbb6ea2fa237b3017ff72fbd9f4ac2e098aa1e6a48db91a2789

See more details on using hashes here.

Provenance

The following attestation bundles were made for trading_mcp_server-0.2.1.tar.gz:

Publisher: publish.yml on mukul8896/trading-mcp-server

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

File details

Details for the file trading_mcp_server-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for trading_mcp_server-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b303f0e821ce0b6dd642da845971ffd618d96b5a8405a0678e0b78bdfad2fb2
MD5 4a5b824db1331c07de84f5e2ad0a1a72
BLAKE2b-256 ddc157e2c09805cb359ce0be7515beabc729600e82756f37c0616c5da3d5ea52

See more details on using hashes here.

Provenance

The following attestation bundles were made for trading_mcp_server-0.2.1-py3-none-any.whl:

Publisher: publish.yml on mukul8896/trading-mcp-server

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

Release history Release notifications | RSS feed

0.4.0

2 files

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

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