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.

  • 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

Metadata

Release files for dse-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dse-mcp 0.1.0
File Size Uploaded Provenance Actions
dse_mcp-0.1.0.tar.gz 525.3 kB With provenance Details for dse_mcp-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dse-mcp 0.1.0
File Interpreter ABI Platform Actions
dse_mcp-0.1.0-py3-none-any.whl Python 3 none any Details for dse_mcp-0.1.0-py3-none-any.whl

Total release size: 566.5 kB

Release files / dse_mcp-0.1.0.tar.gz

Download URL dse_mcp-0.1.0.tar.gz
Size 525.3 kB
Tags Source
SHA-256 checksum
How to use checksums
0c1b4ea6f2f9fdbe9a233c0e752ec7601a2de84c853f82a6562ba8984d38864a
BLAKE2b-256 checksum
How to use checksums
fc96a7e0c256b7de3dbc12c89c1e16735b1ff2bcd0f7f3ce39ee54d0d79dac1a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Release files / dse_mcp-0.1.0-py3-none-any.whl

Download URL dse_mcp-0.1.0-py3-none-any.whl
Size 41.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ca26b258ac8633a83c3901bfaf706487a34701447d17d461951c665d314cdc0e
BLAKE2b-256 checksum
How to use checksums
7cbfa6d1fa79c4b0110848628f8043ac918c8bed30cbf10170b2d0d61288a616
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Security for dse-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dse_mcp-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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