lse-data-mcp
Unofficial MCP server for the London Strategic Edge market data API
Install / Use
claude mcp add OlegDyukel -- npx -y github:OlegDyukel/lse-data-mcpIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Finance & AccountingSupported Platforms
Skill content
View source on GitHubVersioning: While the version is 0.x, tool names and arguments may still change between releases. Pin one —
uvx lse-data-mcp==0.1.6— if you need the surface to stay put.
The server lets an MCP client query London Strategic Edge data through the official
lse-data Python SDK. It runs locally over standard
input/output, uses the API key supplied by the user, returns the upstream JSON-compatible rows,
and does not cache or persist responses.
Supported tools
All tools are declared read-only, non-destructive, and idempotent in their MCP metadata.
Every tool returns the same envelope, so a caller can always tell whether it saw the full result:
{
"rows": [{ "timestamp": "2026-01-02T00:00:00Z", "close": 187.4, "volume": 41230100 }],
"row_count": 1,
"truncated": false
}
When the rows would exceed the response budget the server returns the leading rows it can fit,
sets "truncated": true, and adds a note explaining how to narrow the request. Rows are never
silently dropped.
| Tool | What it returns | Main filters |
| --- | --- | --- |
| get_candles | OHLCV candles for an instrument | symbol, timeframe, start, end, limit, order |
| get_company_profile | Company reference and listing information | symbol, limit |
| get_fundamentals | Snapshot company fundamentals | symbol, limit |
| get_insider_transactions | Reported insider transactions | symbol, transaction_type, start, end, limit, order |
| get_dividends | Dividend events | symbol, start, end, limit, order |
| get_splits | Stock split events | symbol, start, end, limit, order |
| get_cot | CFTC Commitments of Traders positioning | symbol, start, end, limit, order |
| get_bond_yields | Government bond yield history per tenor | symbol, start, end, limit, order |
| get_financial_reports | Income, balance sheet and cash flow statements | symbol, report_type, period, start, end, limit, order |
| get_options | Current option chain for an underlying | underlying, option_type, expiry, strike, strike_min, strike_max, min_dte, max_dte, limit |
| get_option_candles | One-minute premium OHLC for one contract | contract, strike, expiry, option_type, start, end, limit, order |
| get_options_flow | Option prints (time and sales), trailing week | underlying, option_type, min_premium, expiry, max_dte, start, end, limit, order |
| get_series | One (date, value) series: economics, bond tenors | symbol, dataset, start, end, limit, order |
| get_economic_calendar | Scheduled or released economic events | region, event, start, end, released_only, limit, order |
| get_reference | Vault discovery: instruments, datasets, timeframes | resource, category, dataset |
get_reference groups five discovery endpoints — catalog, datasets, reference,
vault_meta, options_underlyings — behind one resource argument, because they take
almost no arguments between them. category applies only to catalog and dataset only to
datasets; passing either to a resource that ignores it is an error, not a silent no-op,
so a grouped tool can never quietly drop a filter you meant. Data tools stay one-to-one with
their SDK method, where every argument is always meaningful.
get_reference("catalog") covers 22,000+ instruments, so expect truncated: true unless you
filter by category.
Each call defaults to at most 200 rows. The upstream API caps a single interactive call at 5,000
rows; use start and end to request narrower windows.
get_financial_reports defaults to 20 instead, because each row carries a whole statement in its
data field and is far larger than a candle or a dividend. Twenty rows is five years of quarterly
reports, or twenty years of annual ones.
start and end accept an ISO 8601 date or timestamp (2026-01-01, 2026-01-01T14:30:00Z).
Anything else is rejected locally, so a malformed date costs no API call and no quota. On
get_candles the upstream API accepts the date part only; an intraday start or end is
rejected there, so narrow a 1s or 1m window by filtering the rows that come back.
Data caveats
Some upstream conventions are worth knowing before you quote a number. The first two were measured by comparing this API against other market-data sources, and both are open questions with the provider. Every caveat below is also carried in the relevant tool's description, so the model reads it on each call rather than only here.
- Daily candles cover the extended session, 08:00–23:00 UTC (04:00–19:00 ET), not the regular
session. A daily
closeis the last post-market print rather than the 16:00 ET closing auction, so it differs from the close quoted by most retail sources — usually by a few cents, in either direction depending on post-market drift. Intraday highs and lows matched Financial Modeling Prep's over the same sessions (measured Aug 2026). The prices are not wrong; the session boundary is different. - Volume is indicative only. Measured Aug 2026: across fifteen sessions of IBM, daily volume ranged from 45% to 106% of what Financial Modeling Prep reported for the same sessions, with no stable relationship to date, volume level, or bar age. The closing auction appears in some sessions and not others. That is two vendors disagreeing rather than proof either is wrong — but it is reason enough not to use this field for liquidity, participation, or turnover conclusions.
- Fundamentals are a dated snapshot, not a live quote.
get_fundamentalsreturns one row per symbol, stampedupdated_at. Itscurrent_priceis that snapshot's price, andmarket_cap,pe_ratioanddividend_yieldderive from it, so all four age together and can disagree with the latest close. Take a current price fromget_candles. - Dividend rows carry four different dates.
startandendfiltereffective_date, the ex-date, whiledeclaration_date,record_dateandpayment_datesit in the row and fall in other months.dividend_typeandfrequencyare not a controlled vocabulary — the same quarterly dividend appears as bothCDandRegular, and its frequency as both4andQuarterly— so neither is safe to filter or group on. - Insider rows are filing legs, not trades.
transaction_typetakes SEC codes (P-Purchase,S-Sale,M-Exempt,F-InKind); an unrecognised value returns zero rows rather than an error, so a wrong code looks like a quiet period. Direction isacquisition_or_disposition, nottransaction_type.priceis 0 on exercises and grants, and a single vest expands into several rows, so both value and count are easy to misread.
Obtain an API key
- Visit the official London Strategic Edge data page.
- Follow the site's prompts to obtain your own API key.
- Store it with
uvx lse-data-mcp login, which prompts without echoing and saves the key to the operating system's own credential store.
Never commit the key to this repository or put a real key in an issue, test, example, or log.
Requirements
- A London Strategic Edge API key
- Either
uv, or Python 3.11 or newer
Installation
The buttons above configure Cursor and VS Code in one click; both still need a stored API key, below. The third installs a bundle into Claude Desktop, which collects the key itself — see Claude Desktop. For any other client, or to run the server by hand, install it yourself.
With uv there is nothing to install:
uvx fetches the published package, runs it in a cached environment of its own, and brings its
own Python. Store your key, then check it:
uvx lse-data-mcp login
uvx lse-data-mcp status
Whichever command you use here, use the same one in your MCP client below. Mixing uvx with a
virtual environment means two different interpreters touch the credential store, which on macOS
raises an extra Keychain prompt — see When the server cannot find your
key.
Without uv, install the same release from PyPI with pip. Check your interpreter first: macOS
ships an older python3 than this project supports, so that command often reports 3.9. Install a
supported one with brew install python@3.13 and use it by name; on Windows, use py -3.13.
python3 --version # must be 3.11 or newer
python3 -m venv .venv # or python3.13 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install lse-data-mcp
Activating that environment is what puts lse-data-mcp on your PATH, and a client will need
its absolute path rather than the bare uvx command.
Claude Desktop
The Install in Claude Desktop button above downloads a bundle that installs in one step, with no configuration file to edit. Two things it will not do for you:
- Install
uvfirst. Claude Desktop runs the bundle throughuvand resolves it from yourPATHrather than shipping its own copy. If the extension fails to start, this is the first thing to check. - Switch it on — and check it again after saving the key. The extension arrives disabled, and saving the API key can switch it off a second time. While it is off, Claude reports that no such connector is installed, or that it has disconnected; both look like a broken install and neither is. The toggle is under Settings → Extensions.
Claude Desktop prompts for your API key during installation and stores it itself, encrypted. A
bundle install therefore never touches the operating system credential store and needs no login
command.
The bundle is deliberately small — a manifest, a dependency pin, and a launcher that does nothing but call the installed package, around 2 KB packed. It contains no server code of its own: it pins one exact published version and in
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
78.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
ruflo
70.8k🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
headroom
69.1kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
46.8kOpen-source super AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-model, multi-channel. Lightweight, extensible, one-line install. (formerly chatgpt-on-wechat)
