justetf-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@justetf-mcpSearch justETF for MSCI World accumulating ETFs and show TER and fund size."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
justetf-mcp
A local Model Context Protocol (MCP) server for read-only justETF data.
This server wraps the third-party druzsan/justetf-scraping Python scraper and exposes a compact MCP tool surface for ETF search, profiles, charts, comparisons, and live quotes.
Caveat: justETF does not publish a stable public API for these endpoints. The upstream scraper relies on justETF web-app endpoints/page structure, so tools can break if justETF changes its site. Use conservative request volumes and review justETF terms for your use case. This is not investment advice.
Tools
search_etfs— query the justETF screener with filters and pagination.get_etf_profile— profile/details for one ISIN, including holdings and country/sector allocations.get_chart— historical chart/performance series for one ISIN.compare_charts— compare performance series for multiple ISINs.get_live_quote— latest gettex/EUR quote via justETF's WebSocket feed.
There is also a justetf://help resource with brief usage notes.
Related MCP server: polygon-mcp
Install
uv syncOr install as a Python package:
pip install .Run locally
uv run justetf-mcpThe server communicates over stdio, which is the usual transport for local MCP clients.
MCP client configuration
Example configuration for a stdio MCP client:
{
"mcpServers": {
"justetf": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/justetf-mcp", "run", "justetf-mcp"]
}
}
}If you install the package globally/in a dedicated venv, use the justetf-mcp executable directly.
Example prompts
"Search justETF for MSCI World accumulating ETFs and show TER and fund size."
"Get the profile for IE00B4L5Y983 without live quote."
"Compare IE00B4L5Y983 and IE00B3RBWM25 over the last 5 years."
"Fetch the last 30 chart rows for IE00B5BMR087."
Development
uv sync --dev # install runtime + dev dependencies
uv run pytest -q # run the test suite
uv run ruff check . # lintHow the underlying scraper reaches justETF
The upstream justetf-scraping package currently uses:
Screener:
https://www.justetf.com/en/search.htmlwith Wicket AJAX POST requests.Chart data:
https://www.justetf.com/api/etfs/{isin}/performance-chart.Live quote:
wss://api.mobile.stock-data-subscriptions.justetf.com/?subscription=trend¶meters=isins:{isin}/currency:EUR/language:en.Profile pages:
https://www.justetf.com/en/etf-profile.html?isin={isin}plus AJAX expansion for allocations.
Acknowledgements
Data access is provided by the third-party
druzsan/justetf-scraping
package, which is MIT licensed. This project is not affiliated with or endorsed
by justETF.
License
MIT © Paolo Gentili. The bundled dependency justetf-scraping is
also MIT licensed, so the two are license-compatible.
Available Tools
5 toolscompare_chartsA
Compare historical chart series for multiple ETFs.
Args: isins: List of ETF ISINs. currency: EUR, USD, CHF, or GBP. dates: shortest for common range, longest for union range. input_value: quote, quote_with_dividends, or quote_with_reinvested_dividends. output_value: absolute, relative, or percentage. start/end: Optional inclusive date range applied after comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| isins | Yes | ||
| currency | No | EUR | |
| dates | No | shortest | |
| input_value | No | quote_with_dividends | |
| output_value | No | percentage | |
| start | No | ||
| end | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It details inputs but omits behavioral traits such as rate limits, data frequency, or what happens with large ISIN lists. The existence of an output schema partially compensates, but more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-liner followed by a bulleted parameter list. Every sentence serves a purpose, with no redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return value explanation is not needed. The description covers most inputs but omits pagination parameters and error handling. For a 9-parameter tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds significant meaning to all listed parameters (e.g., enumerations for currency, dates, input_value, output_value). However, it fails to mention limit and offset (pagination), which are present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Compare historical chart series for multiple ETFs,' specifying a distinct verb and resource, and distinguishes from sibling tools like get_chart (single ETF) and search_etfs (search only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description covers parameter meanings but lacks explicit guidance on when to use compare_charts versus alternatives or exclusions. However, the context from sibling tools implies it is for multi-ETF comparison, making usage relatively clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chartA
Return historical ETF performance chart data for one ISIN.
Args: isin: ETF ISIN. currency: EUR, USD, CHF, or GBP. start: Optional inclusive date YYYY-MM-DD. end: Optional inclusive date YYYY-MM-DD. unclosed: Include current day's quote if justETF provides it. columns: Optional subset of chart columns. Common columns are quote, relative, dividends, cumulative_dividends, quote_with_dividends, relative_with_dividends, quote_with_reinvested_dividends, and relative_with_reinvested_dividends. limit: Number of rows to return, capped at 5000. Defaults to roughly one year. offset: Result offset for pagination after date filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| isin | Yes | ||
| currency | No | EUR | |
| start | No | ||
| end | No | ||
| unclosed | No | ||
| columns | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It mentions some parameter behavior (e.g., unclosed for current day, limit capped at 5000) but does not state that the tool is read-only, idempotent, or any rate limits/authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose followed by parameter list. Some lines are slightly verbose (e.g., columns enumeration), but every sentence adds value. Could be tightened slightly without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no annotations, the description covers parameter semantics well but lacks behavioral context (e.g., read-only nature, error scenarios). Output schema exists so return details are handled elsewhere, but missing safety cues lower completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description explains all 8 parameters with format, defaults, examples (e.g., columns list, date format YYYY-MM-DD), and constraints (limit capped at 5000). This fully compensates for the schema deficit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns historical ETF performance chart data for one ISIN. This verb+resource combination distinguishes it from siblings like compare_charts (multiple ISINs) and get_etf_profile (profile data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies usage for a single ISIN historical data, providing clear context. However, it does not explicitly exclude when to use alternatives like compare_charts or mention conditions like required authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_etf_profileB
Return comprehensive ETF profile data for one ISIN.
Includes name, description, tracked index, TER, fund size, replication,
distribution policy, top holdings, country/sector allocations, and optionally
a live gettex quote. include_gettex defaults to false because it uses a
WebSocket and can block outside trading/network conditions.
| Name | Required | Description | Default |
|---|---|---|---|
| isin | Yes | ||
| include_gettex | No | ||
| expand_allocations | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that include_gettex uses a WebSocket and can block outside trading/network conditions. No annotations exist, so description carries full burden; lacks disclosure on authentication, rate limits, or read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear front-loading of purpose, followed by contents and a behavioral note. No fluff, but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description explains main purpose and includes list of output fields, but fails to describe expand_allocations and timeout_seconds. Given 0% schema coverage and 4 parameters, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 0%, description adds meaning for isin (required) and include_gettex (explains blocking). But expand_allocations and timeout_seconds are not mentioned, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns comprehensive ETF profile data for one ISIN, listing included fields. It distinguishes from sibling tools like search_etfs and get_chart by focusing on a single ISIN's full profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when detailed ETF profile is needed, and warns against using include_gettex=true unnecessarily due to blocking. However, no explicit when-to-use vs alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_quoteA
Return the latest live quote for an ETF from gettex in EUR.
This uses justETF's WebSocket feed. The upstream scraper currently supports gettex/EUR only. Outside trading hours, it should still usually return an initial quote, but a timeout is enforced for local MCP usability.
| Name | Required | Description | Default |
|---|---|---|---|
| isin | Yes | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden for behavioral disclosure. It mentions the WebSocket feed, limitation to gettex/EUR, behavior outside trading hours (initial quote possible), and enforced timeout. This is good coverage for a live quote tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is very concise: two sentences front-loading the purpose and adding behavioral context. No wasted words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers tool source, limitation, and behavioral quirks. With an output schema present, return value details are not needed. It is almost complete; could mention data freshness or real-time nature explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description needs to add meaning to the 2 parameters. It clarifies the quote is from gettex in EUR but does not explain the isin parameter or how timeout_seconds is related to the mentioned timeout. The timeout mention is vague and not explicitly linked to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns the latest live quote for an ETF from gettex in EUR. The verb 'Return' and specific resource (live quote for ETF from gettex in EUR) distinguish it from sibling tools like get_chart or search_etfs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains the tool uses justETF's WebSocket feed, supports only gettex/EUR, and mentions behavior outside trading hours with a timeout. It provides clear context for when to use the tool, though it doesn't explicitly mention when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_etfsA
Search the justETF screener and return ETF overview rows.
Args: query: Free-text query or ISIN. If it looks like an ISIN, the scraper sends it as an ISIN query; otherwise results are post-filtered by name/ticker/wkn/isin. strategy: justETF product group: epg-longOnly, epg-activeEtfs, epg-shortAndLeveraged, or null to query all strategies. asset_class: Optional justETF asset class such as class-equity, class-bonds, class-preciousMetals, class-commodities, class-currency, class-realEstate, class-moneyMarket. region: Optional region such as World, Europe, North%2BAmerica, Emerging%2BMarkets, Asia%2BPacific. country: Optional target country name or alpha-2 code. instrument: Optional instrument type: ETF, ETC, or ETN. provider: Optional provider code/name accepted by justETF. index: Optional tracked index name, e.g. MSCI World. currency: Response currency: EUR, USD, CHF, GBP. limit: Maximum number of rows to return, capped at 5000. offset: Result offset for pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| strategy | No | epg-longOnly | |
| asset_class | No | ||
| region | No | ||
| country | No | ||
| instrument | No | ||
| provider | No | ||
| index | No | ||
| currency | No | EUR | |
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully covers behavioral traits: query handling logic, default strategy, pagination with limit/offset, and a 5000 row cap. This is sufficient for a read-only search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose sentence followed by parameter list, but it is somewhat lengthy. One or two sentences could be trimmed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters and no annotations, the description covers every parameter's behavior and default values. An output schema exists (not shown), which would cover return format, making the description complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero documentation coverage, but the description provides detailed explanations for all 11 parameters, including examples (e.g., asset_class like 'class-equity', region like 'World'). It adds significant meaning beyond the schema structure alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the justETF screener and returns ETF overview rows. It uses a specific verb ('search') and resource ('justETF screener'), and distinguishes from sibling tools like compare_charts and get_etf_profile which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains query behavior (ISIN vs free-text) and strategy options, but does not explicitly state when to use this tool vs alternatives. However, siblings are clearly separate functions, so usage context is apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
compare_charts - First observed
get_chart - First observed
get_etf_profile - First observed
get_live_quote - First observed
search_etfs
TDQS
Scored across 5 tools
Each tool targets a distinct purpose: comparing multiple ETFs, getting single chart, profile data, live quote, and searching. No overlap or confusion.
All tool names use lowercase with underscores and follow a consistent verb_noun pattern (e.g., get_chart, compare_charts, search_etfs).
5 tools is an appropriate scope for an ETF data server, covering search, profile, chart, comparison, and live quote without being excessive.
Core ETF operations are covered, but a tool for listing available filters (e.g., regions, asset classes) could enhance discovery. Slight gap but not critical.
Maintenance
Related MCP Connectors
Free, read-only MCP subset of x402 Toolbox's cheap data endpoints, free via MCP.
Market Data App MCP — wraps the Market Data App API (marketdata.app)
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Read-only access to InfluSense influencer discovery, ratings, watchlists, and reports via MCP.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceRead-only MCP server for Taiwan active ETF research database, providing tools to list ETFs, track buy/sell deltas, view stock history and PnL, and find consensus buys across ETFs.5-
- AlicenseCqualityCmaintenanceEnables querying real-time and historical financial market data for stocks, options, forex, and crypto, including quotes, trades, technical indicators, and reference data through a set of MCP tools.713MIT
- AlicenseNot gradedqualityCmaintenanceEnables access to financial market data including EOD, intraday, fundamentals, news, and more via 75 read-only MCP tools.5MIT
- AlicenseNot gradedqualityDmaintenanceProvides access to EODHD financial APIs for stock prices, earnings, fundamentals, and index components via MCP.2MIT