Official MCP server for Delta Exchange India — market data and account read for AI assistants.
Project description
delta-exchange-mcp
Official MCP (Model Context Protocol) server for Delta Exchange India. Lets AI assistants (Claude Desktop, Claude Code, Cursor, Zed, Codex) query Delta Exchange market data and your own account (read-only) through standardized tools.
Status: Beta. Functional and used internally, but the tool surface and configuration may still change. Please open an issue for bugs, missing tools, or rough edges. Early reports directly shape what ships next.
What you get: 9 public market-data tools + 12 authenticated read-only account tools (positions, orders, fills, wallet, stats, leverage, preferences, profile). No mutations. The server cannot place, edit, or cancel orders.
Quick start
Prerequisite: uv installed on your machine.
Sanity-check the install:
uvx delta-exchange-mcp --help
The server runs local stdio only: your MCP client launches it as a subprocess, and your API keys never leave your machine. uvx resolves the latest published version from PyPI on each launch. To pin a specific version, use uvx "delta-exchange-mcp==0.1.0".
Install in your MCP client
DELTA_API_KEY / DELTA_API_SECRET are optional in every snippet below — drop them for public-data-only mode. Set DELTA_MCP_ENV=india_testnet for testnet.
Claude Code
claude mcp add delta-exchange-mcp \
--scope user \
--env DELTA_MCP_ENV=india_prod \
--env DELTA_API_KEY=your-api-key \
--env DELTA_API_SECRET=your-api-secret \
-- uvx delta-exchange-mcp
--scope user makes the server available across all projects. Verify with claude mcp list.
Cursor
Global: ~/.cursor/mcp.json (or %USERPROFILE%\.cursor\mcp.json on Windows). Project-scoped alternative: .cursor/mcp.json in the repo root.
{
"mcpServers": {
"delta-exchange-mcp": {
"command": "uvx",
"args": ["delta-exchange-mcp"],
"env": {
"DELTA_MCP_ENV": "india_prod",
"DELTA_API_KEY": "your-api-key",
"DELTA_API_SECRET": "your-api-secret"
}
}
}
}
Restart Cursor or open Settings → Tools & MCP to refresh.
Codex
Add to ~/.codex/config.toml:
[mcp_servers.delta-exchange-mcp]
command = "uvx"
args = ["delta-exchange-mcp"]
env = { DELTA_MCP_ENV = "india_prod", DELTA_API_KEY = "your-api-key", DELTA_API_SECRET = "your-api-secret" }
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json (macOS / Linux) or %USERPROFILE%\.codeium\windsurf\mcp_config.json (Windows). UI route: Settings → Cascade → Plugins (MCP servers) → Manage Plugins → View raw config.
{
"mcpServers": {
"delta-exchange-mcp": {
"command": "uvx",
"args": ["delta-exchange-mcp"],
"env": {
"DELTA_MCP_ENV": "india_prod",
"DELTA_API_KEY": "your-api-key",
"DELTA_API_SECRET": "your-api-secret"
}
}
}
}
Zed
Add to ~/.config/zed/settings.json (user-level) or .zed/settings.json (project-level). Zed uses the top-level key context_servers and nests command as an object — note the shape difference from other clients:
{
"context_servers": {
"delta-exchange-mcp": {
"command": {
"path": "uvx",
"args": ["delta-exchange-mcp"],
"env": {
"DELTA_MCP_ENV": "india_prod",
"DELTA_API_KEY": "your-api-key",
"DELTA_API_SECRET": "your-api-secret"
}
}
}
}
}
VS Code (GitHub Copilot)
Add to .vscode/mcp.json in your workspace. The top-level key is servers and each entry needs an explicit "type": "stdio":
{
"servers": {
"delta-exchange-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["delta-exchange-mcp"],
"env": {
"DELTA_MCP_ENV": "india_prod",
"DELTA_API_KEY": "your-api-key",
"DELTA_API_SECRET": "your-api-secret"
}
}
}
}
Claude Desktop
Open Settings → Developer → Edit config, or edit directly at:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"delta-exchange-mcp": {
"command": "uvx",
"args": ["delta-exchange-mcp"],
"env": {
"DELTA_MCP_ENV": "india_prod",
"DELTA_API_KEY": "your-api-key",
"DELTA_API_SECRET": "your-api-secret"
}
}
}
}
Quit and relaunch Claude Desktop for changes to take effect.
Running a dev / unreleased branch
To test an unreleased commit, branch, or fork before it's on PyPI, swap uvx delta-exchange-mcp for uvx --from git+<repo-url>@<ref> delta-exchange-mcp. <ref> can be a branch, tag, or commit SHA.
CLI sanity check:
uvx --from git+https://github.com/delta-exchange/delta-exchange-mcp.git@develop delta-exchange-mcp --help
uv caches the git resolution, so to pick up new commits on the same branch:
uvx --refresh --from git+https://github.com/delta-exchange/delta-exchange-mcp.git@develop delta-exchange-mcp --help
In your MCP client config
Replace args in any snippet above with the git+ form. Three flavours:
Claude Code:
claude mcp add delta-exchange-mcp-dev \
--scope user \
--env DELTA_MCP_ENV=india_prod \
-- uvx --from git+https://github.com/delta-exchange/delta-exchange-mcp.git@develop delta-exchange-mcp
Cursor / Windsurf / Claude Desktop (any mcpServers JSON):
{
"mcpServers": {
"delta-exchange-mcp-dev": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/delta-exchange/delta-exchange-mcp.git@develop",
"delta-exchange-mcp"
],
"env": {
"DELTA_MCP_ENV": "india_prod"
}
}
}
}
Zed (nested command object):
{
"context_servers": {
"delta-exchange-mcp-dev": {
"command": {
"path": "uvx",
"args": [
"--from",
"git+https://github.com/delta-exchange/delta-exchange-mcp.git@develop",
"delta-exchange-mcp"
],
"env": {
"DELTA_MCP_ENV": "india_prod"
}
}
}
}
}
Register the dev server under a separate name (e.g. delta-exchange-mcp-dev) so it doesn't collide with the PyPI install. The git+URL form rebuilds from source on each launch and is meant for testing unreleased changes — stick with uvx delta-exchange-mcp for everyday use.
API keys (optional, for account tools)
- Create a key at delta.exchange/app/account/manageapikeys (testnet: demo.delta.exchange).
- Both
api_keyandapi_secretare shown once at creation. Save the secret immediately; it can't be re-derived. - Read Data permission is enough. Trading permission is not required and not used.
- Recommended: whitelist your IP on the key. Delta blocks non-whitelisted IPs and surfaces your current IP in the error message if it fires.
- Match the environment: prod keys with
DELTA_MCP_ENV=india_prod, demo keys withDELTA_MCP_ENV=india_testnet. Mixing them returnsInvalidApiKey.
Environment variables
| Var | Default | Purpose |
|---|---|---|
DELTA_MCP_ENV |
india_prod |
india_prod or india_testnet. |
DELTA_API_KEY |
(unset) | API key. Optional; when set with DELTA_API_SECRET, account tools register. |
DELTA_API_SECRET |
(unset) | API secret matching DELTA_API_KEY. |
Tools
Public market data (always available)
| Tool | What it returns |
|---|---|
list_products / get_product |
Catalog of tradable instruments and per-product metadata. |
list_tickers / get_ticker |
Last price, 24h stats, mark price, OI. |
get_options_chain |
Option chain snapshot for a given underlying / expiry. |
get_orderbook |
Bid/ask depth for a symbol. |
get_recent_trades |
Last N public trades. |
get_candles |
OHLC candles by resolution. |
get_reference_data |
Assets + indices reference. |
Account read-only (requires DELTA_API_KEY + DELTA_API_SECRET)
| Tool | What it returns |
|---|---|
get_positions / get_margined_positions |
Open positions, sizes, entry, unrealized PnL. |
get_wallet_balances / get_wallet_transactions |
Per-asset balances + ledger. |
get_open_orders / get_order_history / get_order_by_id |
Active and historical orders. |
get_fills |
Trade fills (own). |
get_product_leverage |
Per-product leverage setting. |
get_trading_stats / get_trading_preferences / get_profile |
Account-level stats, preferences, profile. |
Example prompts
Once connected, you can ask things like:
- "What's the current BTCUSD mark price and 24h range?"
- "Show the options chain for BTC expiring this Friday."
- "What positions do I have open and what's my total unrealized PnL?"
- "List my fills from the last 24 hours grouped by symbol."
- "How much USDT do I have free vs blocked in margin?"
The assistant picks the right tool based on the question. You don't need to name the tool.
Development
uv sync # install deps
uv run pytest # run tests (no network, respx-mocked)
uv run ruff check src tests # lint
uv run delta-exchange-mcp # run server (stdio)
Testing with MCP Inspector
# stdio CLI mode
bash scripts/inspect.sh --cli --method tools/list
bash scripts/inspect.sh --cli --method tools/call \
--tool-name get_ticker --tool-arg symbol=BTCUSD
# with auth
DELTA_API_KEY=... DELTA_API_SECRET=... \
bash scripts/inspect.sh --cli --method tools/call --tool-name get_wallet_balances
# web UI
bash scripts/inspect.sh # → http://localhost:6274
Maintainers: see RELEASING.md for the release procedure.
Roadmap
- Now: 9 public market-data + 12 authenticated read-only account tools.
- Next: trading mutations (place / edit / cancel / close, leverage change) gated behind an explicit
DELTA_MCP_MODE=tradeflag, with an audit log and basic guardrails.
Feedback & issues
This is the first public cut and we want to make it better. Please file:
- Bugs (incorrect data, signing/auth errors, crashes)
- Missing tools or fields you'd want exposed
- Rough edges in setup, docs, or error messages
- Anything you'd build on top of this if a primitive existed
→ github.com/delta-exchange/delta-exchange-mcp/issues
Please redact api_key / api_secret from any logs or screenshots before attaching.
Safety
- No mutations. Every tool is GET. The server cannot place, edit, or cancel orders.
- Local stdio only. Per-user keys never leave your machine; no shared hosted endpoint.
- Read the code. It's a financial-tool MCP; treat it like one.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file delta_exchange_mcp-0.2.0.tar.gz.
File metadata
- Download URL: delta_exchange_mcp-0.2.0.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdde2a154dba5727369eb6789097bef63f481411387bb8521cfc950e7c7fdbd1
|
|
| MD5 |
b67d0e2e269dd33e1eeb6acb84877967
|
|
| BLAKE2b-256 |
da5073781b71977b2aa9a84aa4c0c4e4ed3a1ace9cd47e2189bdff079b05a790
|
File details
Details for the file delta_exchange_mcp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: delta_exchange_mcp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c3a1db3df896078c2273de12d342619c44be5d576a4b660541b6a739031bb91
|
|
| MD5 |
7806b8fda756b61552df28c0b22dd5b8
|
|
| BLAKE2b-256 |
69f67c4274c79fad204b312856bb67245a2b31718def0cb53f6f874ba1a3d200
|