Skip to main content

dse-mcp

PyPI Python CI License: MIT MCP

A production-grade Model Context Protocol (MCP) server for the Dhaka Stock Exchange (DSE) — live quotes, price history, fundamentals, order-book depth, news, technical indicators, screening — plus a bundled dse-analysis skill that teaches your agent a disciplined buy/sell workflow on top of those tools.

Data is scraped from dsebd.org (DSE's official site) with all of its production quirks handled: incomplete TLS chains, -- placeholders, comma-grouped numbers, invisible layout tables, market-hours-aware caching, and a mirror-domain fallback. Informational only — not investment advice. Not affiliated with DSE.

Install

Requires Python 3.12+ (or just uv/pipx, which manage Python for you).

# Register with Claude Code (recommended)
claude mcp add dse -s user -- uvx dse-mcp
Other clients

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "dse": { "command": "uvx", "args": ["dse-mcp"] }
  }
}

Cursor (~/.cursor/mcp.json): same JSON shape as Claude Desktop.

pipx:

pipx install dse-mcp
# then register with the command "dse-mcp"

Docker:

docker run -i --rm ghcr.io/ofsazib/dse-mcp

The dse-analysis skill

The repo ships an agent skill that turns these tools into a repeatable buy/sell analysis workflow (market context → fundamentals → technicals → news → verdict with confidence + risks):

# from a git clone of this repo
./scripts/install_skill.sh          # installs to ~/.claude, ~/.agents, ~/.zcode

Or copy skills/dse-analysis/ into your client's skills directory manually.

Tools (16)

Every response carries market_status (live/closed), data_freshness (live/snapshot/stale), and data_as_of — so closed-market data is never mistaken for live prices.

Market

Tool Description
market_status Live/closed, session hours, Dhaka time, next session
market_summary DSEX/DS30/DSES + changes, totals for the latest session
get_index_history(days) Daily index history (rolling one-year archive)
top_movers(category) gainers | losers | most_active | turnover
sector_performance Advancing/declining + avg change per sector

Stock

Tool Description
search_symbols(query) Fuzzy search over 636 bundled instruments (22 sectors)
get_quote(symbol) LTP, day range, close, change, trades, value, volume
get_price_history(symbol, start, end, days) Day-end OHLCV, oldest-first
get_company_profile(symbol) Capital structure, listing year, 52w range, EPS block
get_fundamentals(symbol) Analysis-ready: EPS, P/E, dividends, reserves, 52w
get_market_depth(symbol) Live bid/ask levels + session stats
get_news(symbol, days, limit) Company or market-wide news/disclosures
get_pe_ratios() P/E table (interim/audited/trailing) for all instruments

Analysis & screening

Tool Description
compute_indicators(symbol, ...) SMA50/200, RSI(14), MACD, Bollinger
technical_summary(symbol) Trend, support/resistance, outlook + reasons
screen_stocks(sector, pe_max, price_range, volume_min) Filter the live board

Trading-hours aware caching

  • Market live (Sun–Thu 10:00–14:50 Asia/Dhaka): data cached 30s (depth is always fetched fresh).
  • Market closed: the last session's snapshot is cached ~1h and persisted to ~/.cache/dse-mcp/, so a restart still serves the last session (labeled snapshot).
  • DSE unreachable: the persisted snapshot is served labeled stale.

Configuration (optional)

All via environment variables with the DSE_MCP_ prefix — see .env.example. Useful ones:

Variable Default Purpose
DSE_MCP_RATE_LIMIT 5.0 Outbound requests/second (token bucket)
DSE_MCP_CACHE_TTL_OPEN 30 Seconds, while the market is live
DSE_MCP_CACHE_DIR ~/.cache/dse-mcp Snapshot persistence
DSE_MCP_LOG_LEVEL WARNING Logs go to stderr (never stdout — MCP)

Troubleshooting

  • [SSL: CERTIFICATE_VERIFY_FAILED] — dsebd.org serves an incomplete TLS chain. dse-mcp uses the OS trust store (truststore), which handles it; do not replace it with verify=False.
  • Empty depth / quotes look frozen — the market is closed (or a holiday). Check market_status and the response's data_as_of.
  • DGEN: null — the DGEN index is retired from DSE's live pages; null is the honest value.

Development

git clone https://github.com/ofsazib/dse-mcp && cd dse-mcp
uv sync                                   # Python 3.12 via uv
uv run pytest                             # 44 offline tests (recorded fixtures)
uv run ruff check .
uv run dse-mcp                            # run the server locally
npx @modelcontextprotocol/inspector uv run dse-mcp   # visual debugging

Re-record fixtures when dsebd.org markup changes: uv run python scripts/record_fixtures.py. Rebuild the instrument bundle: uv run python scripts/build_instruments.py. See AGENTS.md for architecture and CONTRIBUTING.md to contribute.

Legal

  • Data source: dsebd.org (Dhaka Stock Exchange). This project is an independent, unaffiliated open-source client; data remains the property of DSE.
  • Nothing here is investment advice. DSE securities can be illiquid and subject to circuit breakers; verify everything against primary sources before acting.

License

MIT © Omar Faruk Sazib

Download files

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

Source Distribution

dse_mcp-0.1.0.tar.gz (525.3 kB view details)

Uploaded Source

Built Distribution

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

dse_mcp-0.1.0-py3-none-any.whl (41.1 kB view details)

Uploaded Python 3

File details

Details for the file dse_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: dse_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 525.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for dse_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0c1b4ea6f2f9fdbe9a233c0e752ec7601a2de84c853f82a6562ba8984d38864a
MD5 27a44d550e62e1a53153300a5cc9ca2b
BLAKE2b-256 fc96a7e0c256b7de3dbc12c89c1e16735b1ff2bcd0f7f3ce39ee54d0d79dac1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for dse_mcp-0.1.0.tar.gz:

Publisher: release.yml on ofsazib/dse-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 dse_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: dse_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 41.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for dse_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ca26b258ac8633a83c3901bfaf706487a34701447d17d461951c665d314cdc0e
MD5 f6c6e6eb893780a90a748d8dbed56036
BLAKE2b-256 7cbfa6d1fa79c4b0110848628f8043ac918c8bed30cbf10170b2d0d61288a616

See more details on using hashes here.

Provenance

The following attestation bundles were made for dse_mcp-0.1.0-py3-none-any.whl:

Publisher: release.yml on ofsazib/dse-mcp

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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page