cse-mcp
Give Claude (or any AI) live Colombo Stock Exchange data.
No more copy-pasting prices into chat.
You: How did banks do today vs the ASPI? Anything interesting from COMB?
Claude: *checks get_market_overview, get_sector_indices, get_stock, get_announcements*
The ASPI closed +2.75% at 22,123. Banks did even better (+3.7%).
COMB ended at LKR 225.25 (+4.3%) on 1.5M shares...
cse-mcp is an MCP server. MCP is a standard "plug" that lets AI apps use tools. This one connects your AI to the public data behind cse.lk, so its answers use current prices, indices and announcements.
⚡ Install (pick your app)
Claude Desktop: one click, nothing else to install
- Download
cse-mcp-<version>.mcpbfrom the latest release. - Double-click it (or drag it into Claude Desktop) and click Install.
- Ask: "How's the CSE today?" 🎉
Claude Desktop sets up Python and everything else for you.
Claude Code
claude mcp add cse -- uvx cse-mcp
Or install it as a plugin, which adds a market-analyst skill too:
/plugin install cse-mcp --marketplace lxnid/cse-mcp
Cursor, VS Code, Windsurf, Claude Desktop (manual), and other MCP apps
Add this to the app's MCP config:
{
"mcpServers": {
"cse": { "command": "uvx", "args": ["cse-mcp"] }
}
}
This needs uv, the fast Python package manager (brew install uv, or see the link for Windows). Python itself is downloaded automatically.
It's also listed in the official MCP Registry as io.github.lxnid/cse-mcp, so apps that browse the registry can find it.
claude.ai on the web or phone?
Not yet. Web and mobile apps can only reach servers hosted on the internet, and this one runs on your computer. You can host it yourself with uvx cse-mcp --http behind an HTTPS URL (see Development below), then add that URL as a custom connector.
🧰 What your AI can do with it
| Tool | What it gives you |
|---|---|
get_market_overview |
Market open/closed, ASPI & S&P SL20, today's turnover/volume/trades |
get_top_movers |
Top gainers, losers or most active stocks today |
list_stocks |
Search all listed stocks by name/ticker and sort by turnover, % change, market cap… |
get_stock |
Full profile of one stock: price, ranges (week → all-time), market cap, foreign holding, beta |
get_price_history |
Price history: today (15-min bars), 1w, 1m, 3m or 1y |
get_trades_by_price |
Today's volume at each price level, plus VWAP |
get_sector_indices |
Every S&P/CSE sector index, best to worst |
get_index_history |
ASPI / S&P SL20 / any sector index over time |
get_market_daily_summary |
Foreign vs local buying (net foreign flow), market P/E, P/BV, dividend yield |
get_announcements |
Dividends, financial statements (PDF links), circulars, non-compliance notices… |
All tools are read-only. They can't place trades or change anything.
Things to ask:
- "Give me a market wrap for today."
- "Were foreigners net buyers or sellers today?"
- "Show me the top 10 most active stocks and which sectors they're in."
- "How has HNB done over the past year vs the Banks index?"
- "Any new quarterly results out today? Summarise the ones from plantations."
- "Where did most of JKH's volume trade today?"
💡 Tickers are forgiving:
jkh,JKHandJKH.N0000all work. Non-voting shares useX0000(e.g.JKH.X0000).
🧠 How it works
Your AI ──MCP──▶ cse-mcp (on your computer) ──HTTPS──▶ www.cse.lk/api/*
│
└─ tidies the JSON: readable names, rounded numbers,
Sri Lanka time, 15-min bars, PDF links, 30s cache
src/cse_mcp/client.py: talks to cse.lk (timeouts, errors, a 30-second cache)src/cse_mcp/server.py: the MCP tools (one function each, easy to read)tests/: offline tests with fake API responses, plus an opt-in live test
Endpoint reference: the community CSE API documentation.
⚠️ Good to know
- Unofficial. Not affiliated with or endorsed by the Colombo Stock Exchange. The cse.lk API is public but undocumented, so it can change without notice. If a tool breaks, open an issue.
- Private. It collects nothing. Requests go straight from your computer to cse.lk. See PRIVACY.md.
- Be gentle. Responses are cached for 30 seconds so cse.lk isn't spammed. Please keep it that way.
- Not financial advice. Data can be delayed or wrong, and AIs can misread numbers. Double-check before you trade.
- Prices are in LKR. Times are Sri Lanka time (UTC+05:30). Trading runs Mon–Fri, 09:30–14:30.
🛠️ Development
git clone https://github.com/lxnid/cse-mcp.git && cd cse-mcp
uv sync
uv run pytest # offline tests (fast, no internet)
uv run pytest -m live # hit the real cse.lk API
uv run cse-mcp --http # serve over HTTP at http://127.0.0.1:8000/mcp
uv run mcp dev src/cse_mcp/server.py # poke the tools in the MCP Inspector (needs Node.js)
To run your local copy in Claude Desktop, use "command": "uv", "args": ["--directory", "/ABSOLUTE/PATH/TO/cse-mcp", "run", "cse-mcp"].
Ideas, bug reports and PRs are welcome. See CONTRIBUTING.md.
📄 License
MIT: use it, fork it, build on it.
Metadata
Release files for cse-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)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| cse_mcp-0.1.0.tar.gz | 14.3 kB | Without provenance | Details for cse_mcp-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| cse_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for cse_mcp-0.1.0-py3-none-any.whl |
Total release size: 29.8 kB
Release files / cse_mcp-0.1.0.tar.gz
| Download URL | cse_mcp-0.1.0.tar.gz |
|---|---|
| Size | 14.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
209f0d934a44b45a14f22b5daf6de197cdf4f7dd5118cb36f9ce45e8b5b94955
|
|
BLAKE2b-256 checksum How to use checksums |
6bf32ddc34633f2cf8b6b5088e14d1a5fd1d4563b997044294c0066bf0df0f50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / cse_mcp-0.1.0-py3-none-any.whl
| Download URL | cse_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 15.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d0d5799c978255f9d11759c9c34fba21294ce6f5ae31c027a648ba14785ede6f
|
|
BLAKE2b-256 checksum How to use checksums |
8688b51406b11c2f5769c284b5be278fab075f69f9bd864f70caff4ec0dbcf7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.7 {"installer":{"name":"uv","version":"0.13.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for cse-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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.