THE EODDATA MCP CONNECTOR

Market data.
In good context.

Give your AI a direct line to EODData. Explore prices, company fundamentals and corporate actions through 22 focused, read-only tools.

Your API key. Your data permissions. No trading tools.
THE RESEARCH DESKILLUSTRATIVE
You

“Give me the latest available AAPL quote.
Keep the date and currency.”

get_quoteread-only ↗
RESOLVED INSTRUMENT

AAPL / NASDAQ

EOD
Source EODDataDate PreservedCurrency Explicit

Illustrative workflow · no live prices displayed

Useful answers begin
with traceable inputs.
22read-only tools
8data families
2hosted auth modes
1complete field guide

01 / BUILT FOR RESEARCH

A small interface.
A well-equipped desk.

Model Context Protocol lets a compatible AI client discover tools and request structured data. This server connects that workflow to your EODData account.

↗

Start with the market.

Discover exchanges and symbols, then retrieve end-of-day quotes and bounded historical requests. Preserve the provider’s identifiers.

PRICES · EXCHANGES · SYMBOLS
▤

Read beyond the price.

Bring company profiles, fundamentals, splits, dividends and provider-supplied technical indicators into the same conversation.

COMPANIES · ACTIONS · TECHNICALS
⌘

Keep the details close.

Embedded reference resources give your client endpoint and schema context. The page below explains setup, arguments and practical limits.

TOOLS · REFERENCES · PROMPTS

02 / GET CONNECTED

One catalog.
Two ways in.

Choose the authentication your client supports. v1 and v2 expose the same tools—they are not different data or API versions.

v2 · OAuthBROWSER AUTHORIZATION

Your key stays out of the URL.

Connect an OAuth-capable remote MCP client. Sign in on this server’s authorization page with your EODData key, then approve the read-only scope.

https://your-domain.example/eoddata-mcp-ayx/mcp/v2
Scope: eoddata:read · Authorization Code + PKCE
v1 · API keyHEADER-BASED ACCESS

Direct, explicit authentication.

For clients that support custom HTTP headers, send your EODData key in X-API-Key. Use your own account; never share a key between users.

https://your-domain.example/eoddata-mcp-ayx/mcp/v1
Prefer headers. Keys in query strings can leak through proxy logs.

Preview configuration. These are the intended shared-host paths, not a claim that a server is online. The operator must configure the domain, suffixes and path-aware OAuth routing before connecting.

CONFIGURATION, WITHOUT GUESSWORK

From your key
to your first call.

  1. 01
    Get a provider key

    Create an EODData account ↗, then retrieve the key from My Account → API ↗. Check your dataset permissions.

  2. 02
    Connect your client

    Pick OAuth or an API-key header. Use the config example that matches your client; approve the server’s tools when prompted.

  3. 03
    Verify, then query

    Start with list_exchanges or a symbol search. For a key-free catalog check, use list_currencies. Ask for the source, timestamp, currency and any missing fields in the answer.

This documentation page never asks for or sends your key. Compatibility depends on the client version, available MCP features and your account.

Remote OAuth · MCP client
Add the /mcp/v2 endpoint in your OAuth-capable client.

Choose a connection method to see its configuration. Never paste an API key into this page.

Client configuration reference: VS Code MCP documentation ↗. Other clients have their own configuration schema. See MCP authorization ↗ for protocol details.

03 / TOOL REFERENCE

Know what
you can ask.

Every public tool name and argument below comes from the server source. Expand a tool for its signature and usage notes. 22 read-only tools correspond to the pinned EODData REST contract.

/
22 toolsREAD-ONLY · SOURCE-DERIVED SIGNATURES
get_exchangeExchanges

Get details for a single exchange (EODData /Exchange/Get).

Arguments for get_exchange
ArgumentTypeDefault
exchange_codestrRequired
Full tool notes
Get details for a single exchange (EODData /Exchange/Get).

Published access: Standard+ (API key required). The upstream service
is the final authorization authority.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.

Returns:
    Exchange object: code, name, dateStamp, type, country, currency,
    timeZone, mic, suffix. Fields may be null/absent.
get_fundamentalFundamentals

Get fundamental data for one symbol (EODData /Fundamental/Get).

Arguments for get_fundamental
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
Full tool notes
Get fundamental data for one symbol (EODData /Fundamental/Get).

Published access: Gold+ (Fundamental Data). The upstream service is
the final authorization authority.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.

Returns:
    Fundamental object: exchangeCode, symbolCode,
    marketCapitalization, ebitda, peg, bookValue, dividendPerShare,
    dividendYield, earningsPerShare, revenuePerShare, priceToSales,
    priceToBook, beta, sharesOutstanding, dividendDate, grossMargin,
    profitMargin, operatingMargin, returnOnAssets, returnOnEquity,
    revenue, grossProfit, trailingPE, forwardPE, totalCash,
    totalCashPerShare, totalDebt, totalDebtToEquity,
    bookValuePerShare. Fields may be null/absent.
get_profileCompanies

Get the company profile for one symbol (EODData /Profile/Get).

Arguments for get_profile
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
Full tool notes
Get the company profile for one symbol (EODData /Profile/Get).

Published access: Gold+ (Company Profiles). The upstream service is
the final authorization authority.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.

Returns:
    Profile object: exchangeCode, symbolCode, name, description,
    type, currency, country, figi, isin, cusip, cik, lei, sector,
    industry, about, address, phone, website. Fields may be null/absent.
get_quotePrices

Get a single end-of-day quote for one symbol (EODData /Quote/Get).

Arguments for get_quote
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
datestr | NoneNone
Full tool notes
Get a single end-of-day quote for one symbol (EODData /Quote/Get).

Published access: Standard+; how far back 'date' may reach depends on the
account's EOD-history entitlement. The upstream service is the final
authorization authority.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.
    date (str, optional): Trading date YYYY-MM-DD; latest when omitted.

Returns:
    Quote object: exchangeCode, symbolCode, name, interval, dateStamp,
    open, high, low, close, adjustedClose, volume, openInterest, bid,
    ask, previous, change, currency. Fields may be null/absent.
get_symbolSymbols

Get details for a single symbol (EODData /Symbol/Get).

Arguments for get_symbol
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
Full tool notes
Get details for a single symbol (EODData /Symbol/Get).

Published access: Standard+. Nested premium sections (profile,
fundamental, technical) may be absent on lower tiers; the upstream
service is the final authorization authority.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.

Returns:
    Symbol object: code, name, exchangeCode, type, currency, figi,
    dateStamp, open/high/low/close, volume, openInterest, previous,
    change, bid, ask, plus optional nested quotes, splits, dividends,
    profile, fundamental, technical. Fields may be null/absent.
get_technical_indicatorsTechnicals

Get pre-built technical indicators for one symbol (EODData /Technical/Get).

Arguments for get_technical_indicators
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
Full tool notes
Get pre-built technical indicators for one symbol (EODData /Technical/Get).

Published access: Silver+ (Technical Indicators). The upstream
service is the final authorization authority.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.

Returns:
    Technical object (70 fields): quarter/biannual/YTD change;
    week/month/year low, high, change, volume families; SMA/WMA/EMA
    5-200; MACD; stochastic 9/14; RSI 9/14; WPR/MTM/ROC; Bollinger
    bands; OBV/AD/Aroon/DMI/ATR/CCI/SAR; volatility and liquidity.
    Fields may be null/absent.
list_countriesReference data

List all countries known to EODData (EODData /Country/List).

Arguments for list_countries
ArgumentTypeDefault
No arguments.
Full tool notes
List all countries known to EODData (EODData /Country/List).

Metadata operation: works without an API key on any plan.

Returns:
    Array of objects:
    - code (str): ISO country code (e.g. "US").
    - name (str): country name (e.g. "United States").
list_currenciesReference data

List all currencies known to EODData (EODData /Currency/List).

Arguments for list_currencies
ArgumentTypeDefault
No arguments.
Full tool notes
List all currencies known to EODData (EODData /Currency/List).

Metadata operation: works without an API key on any plan.

Returns:
    Array of objects:
    - code (str): currency code (e.g. "USD").
    - name (str): currency name (e.g. "US Dollar").
list_dividends_by_exchangeCorporate actions

List dividends for an exchange (EODData /Dividends/List).

Arguments for list_dividends_by_exchange
ArgumentTypeDefault
exchange_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List dividends for an exchange (EODData /Dividends/List).

Published access: Bronze+ (Dividend Information). The upstream
service is the final authorization authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Dividend objects: exchangeCode,
    symbolCode, dateStamp, paymentDateStamp, amount, source. Fields
    may be null/absent.
list_dividends_by_symbolCorporate actions

List dividends for one symbol (EODData /Dividends/List by symbol).

Arguments for list_dividends_by_symbol
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List dividends for one symbol (EODData /Dividends/List by symbol).

Published access: Bronze+ (Dividend Information). The upstream
service is the final authorization authority.

Pagination is MCP-local only; the response is an envelope
{pagination: {total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Dividend objects: exchangeCode,
    symbolCode, dateStamp, paymentDateStamp, amount, source. Fields
    may be null/absent.
list_exchange_typesExchanges

List all exchange types known to EODData (EODData /ExchangeType/List).

Arguments for list_exchange_types
ArgumentTypeDefault
No arguments.
Full tool notes
List all exchange types known to EODData (EODData /ExchangeType/List).

Metadata operation: works without an API key on any plan.

Returns:
    Array of objects with a single field:
    - name (str): exchange type name (e.g. "Stock Exchange").
list_exchangesExchanges

List all exchanges available to the account (EODData /Exchange/List).

Arguments for list_exchanges
ArgumentTypeDefault
No arguments.
Full tool notes
List all exchanges available to the account (EODData /Exchange/List).

Published access: Standard+ (API key required). Which exchanges carry
data for your account depends on the membership tier; the upstream
service is the final authorization authority.

Returns:
    Array of Exchange objects: code, name, dateStamp, type, country,
    currency, timeZone, mic, suffix. Fields may be null/absent.
list_fundamentalsFundamentals

List fundamental data for every symbol on an exchange (EODData /Fundamental/List).

Arguments for list_fundamentals
ArgumentTypeDefault
exchange_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List fundamental data for every symbol on an exchange (EODData /Fundamental/List).

Published access: Gold+ (Fundamental Data). The upstream service is
the final authorization authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Fundamental objects: exchangeCode,
    symbolCode, marketCapitalization, ebitda, peg, bookValue,
    dividendPerShare, dividendYield, earningsPerShare,
    revenuePerShare, priceToSales, priceToBook, beta,
    sharesOutstanding, dividendDate, grossMargin, profitMargin,
    operatingMargin, returnOnAssets, returnOnEquity, revenue,
    grossProfit, trailingPE, forwardPE, totalCash, totalCashPerShare,
    totalDebt, totalDebtToEquity, bookValuePerShare. Fields may be
    null/absent.
list_profilesCompanies

List company profiles for an exchange (EODData /Profile/List).

Arguments for list_profiles
ArgumentTypeDefault
exchange_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List company profiles for an exchange (EODData /Profile/List).

Published access: Gold+ (Company Profiles). The upstream service is
the final authorization authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Profile objects: exchangeCode,
    symbolCode, name, description, type, currency, country, figi,
    isin, cusip, cik, lei, sector, industry, about, address, phone,
    website. Fields may be null/absent.
list_quotes_by_exchangePrices

List end-of-day quotes for every symbol on an exchange (EODData /Quote/List).

Arguments for list_quotes_by_exchange
ArgumentTypeDefault
exchange_codestrRequired
datestr | NoneNone
limitint | None1000
offsetint0
Full tool notes
List end-of-day quotes for every symbol on an exchange (EODData /Quote/List).

Published access: Standard+; how far back 'date' may reach depends on
the account's EOD-history entitlement (30 days on Standard up to 10
years on Platinum). The upstream service is the final authorization
authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    date (str, optional): Trading date YYYY-MM-DD; latest when omitted.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Quote objects: exchangeCode,
    symbolCode, name, interval, dateStamp, open, high, low, close,
    adjustedClose, volume, openInterest, bid, ask, previous, change,
    currency. Fields may be null/absent.
list_quotes_by_symbolPrices

Get historical quotes for one symbol at a chosen interval (EODData /Quote/List).

Arguments for list_quotes_by_symbol
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
intervalstrRequired
Full tool notes
Get historical quotes for one symbol at a chosen interval (EODData /Quote/List).

Intervals: '1','5','10','15','30' minutes, 'h' hourly, 'd' daily,
'w' weekly, 'm' monthly, 'q' quarterly, 'y' yearly.

Published access: daily+ history depth follows the account's
EOD-history entitlement; the membership matrix marks 1/5/10/15/30/60
minute bars Platinum-only while granting Gold 30 days of intraday
history (a published ambiguity), and minute-bar data is currently only
available for US equity and futures exchanges. The upstream service is
the final authorization authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.
    interval (str): One of 1/5/10/15/30/h/d/w/m/q/y.
    from_date (str, optional): Start date YYYY-MM-DD.
    to_date (str, optional): End date YYYY-MM-DD.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Quote objects: exchangeCode,
    symbolCode, name, interval, dateStamp, open, high, low, close,
    adjustedClose, volume, openInterest, bid, ask, previous, change,
    currency. Fields may be null/absent.
list_splits_by_exchangeCorporate actions

List stock splits for an exchange (EODData /Splits/List).

Arguments for list_splits_by_exchange
ArgumentTypeDefault
exchange_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List stock splits for an exchange (EODData /Splits/List).

Published access: Bronze+ (Splits Information). The upstream service
is the final authorization authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Split objects: exchangeCode,
    symbolCode, dateStamp, ratio, multiplier, source. Fields may be
    null/absent.
list_splits_by_symbolCorporate actions

List stock splits for one symbol (EODData /Splits/List by symbol).

Arguments for list_splits_by_symbol
ArgumentTypeDefault
exchange_codestrRequired
symbol_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List stock splits for one symbol (EODData /Splits/List by symbol).

Published access: Bronze+ (Splits Information). The upstream service
is the final authorization authority.

Pagination is MCP-local only; the response is an envelope
{pagination: {total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    symbol_code (str): Symbol code within that exchange, e.g. 'AAPL'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Split objects: exchangeCode,
    symbolCode, dateStamp, ratio, multiplier, source. Fields may be
    null/absent.
list_symbol_typesSymbols

List all symbol types known to EODData (EODData /SymbolType/List).

Arguments for list_symbol_types
ArgumentTypeDefault
No arguments.
Full tool notes
List all symbol types known to EODData (EODData /SymbolType/List).

Metadata operation: works without an API key on any plan.

Returns:
    Array of objects with a single field:
    - name (str): symbol type name (e.g. "Common Stock", "ETF").
list_symbolsSymbols

List all symbols on an exchange (EODData /Symbol/List).

Arguments for list_symbols
ArgumentTypeDefault
exchange_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List all symbols on an exchange (EODData /Symbol/List).

Published access: Standard+; exchange availability depends on the
membership tier. The upstream service is the final authorization
authority.

Pagination is MCP-local only: the full upstream list is always
retrieved (full quota/transfer cost) and sliced here to bound the MCP
payload. The response is an envelope {pagination: {total, offset,
limit, returned, truncated}, data: [...]} so truncation is explicit.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Symbol objects: code, name,
    exchangeCode, type, currency, figi, dateStamp, OHLCV fields,
    openInterest, previous, change, bid, ask. Fields may be null/absent.
list_technical_indicatorsTechnicals

List pre-built technical indicators for every symbol on an exchange (EODData /Technical/List).

Arguments for list_technical_indicators
ArgumentTypeDefault
exchange_codestrRequired
limitint | None1000
offsetint0
Full tool notes
List pre-built technical indicators for every symbol on an exchange
(EODData /Technical/List).

Published access: Silver+ (Technical Indicators). The upstream
service is the final authorization authority.

Pagination is MCP-local only: the full upstream list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    exchange_code (str): EODData exchange code, e.g. 'NASDAQ'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of Technical objects (70 fields):
    quarter/biannual/YTD change; week/month/year low, high, change,
    volume families; SMA/WMA/EMA 5-200; MACD; stochastic 9/14;
    RSI 9/14; WPR/MTM/ROC; Bollinger bands; OBV/AD/Aroon/DMI/ATR/CCI/
    SAR; volatility and liquidity. Fields may be null/absent.
search_symbolsSymbols

Search symbols across exchanges by free text (EODData /Symbol/Search).

Arguments for search_symbols
ArgumentTypeDefault
search_stringstrRequired
limitint | None1000
offsetint0
Full tool notes
Search symbols across exchanges by free text (EODData /Symbol/Search).

Published access: Standard+. Sentence-like searches with spaces are
supported; the text travels as one URL-encoded path segment.

Pagination is MCP-local only: the full upstream result list is always
retrieved and sliced here. The response is an envelope {pagination:
{total, offset, limit, returned, truncated}, data: [...]}.

Args:
    search_string (str): Free-text search, e.g. 'apple inc'.
    limit (int, optional): Max rows returned (default 1000); None for all.
    offset (int): Rows to skip (default 0).

Returns:
    Envelope with data rows of SearchResult objects: symbolGuid,
    exchangeCode, exchangeName, symbolCode, symbolName, symbolType,
    figi, isin, cusip, currency, country, industry, sector, last,
    matches. Fields may be null/absent.

The live client’s tools/list response is authoritative for its current deployment. Embedded documentation is exposed under eoddata://references/....

04 / FROM DATA TO CONTEXT

A better question.
A useful answer.

Start with a precise universe and a bounded date range. These examples are prompts and tool arguments, not investment advice or live results.

01 / DISCOVER

Find the right instrument.

“Find Apple on NASDAQ. Confirm its identifier and exchange before fetching a quote.”

Resolve through symbol discovery, then preserve the exchange/symbol pair.

get_quote({
  "exchange_code": "NASDAQ",
  "symbol_code": "AAPL"
})
02 / INVESTIGATE

Explain a discontinuity.

“Check whether a price jump coincides with a split or dividend. Keep raw and adjusted prices separate.”

Combine bounded quote history with list_splits_by_symbol and list_dividends_by_symbol. Cite dates and missing observations.

Quote historyCorporate actionsContext
03 / RESEARCH

Build a company brief.

“Give me a source-backed company profile and available fundamentals. Identify unavailable fields.”

Use get_profile and get_fundamental for the resolved instrument. Request technical indicators only when they are relevant and permitted.

ProfileFundamentalsEvidence

05 / THE FIELD GUIDE

The details that
make it work.

Connection is only the beginning. Understand identifiers, permissions, response shapes and limits before putting the data into a workflow.

01

Keep the two credentials distinct.

A provider API key grants access to EODData. An OAuth access token issued by this MCP server authorizes the MCP connection. They are different credentials and are not interchangeable.

  • v1: send X-API-Key: YOUR_PROVIDER_KEY with each request. Authorization: Bearer YOUR_PROVIDER_KEY is a compatibility option on this endpoint only.
  • v2: complete discovery and authorization through the client. It sends the server-issued Bearer access token and refreshes it through the OAuth flow. Do not paste your raw provider key into the Bearer field here.
  • stdio: the local process reads EODDATA_API_KEY from its environment. No remote login flow is involved.

Reference metadata tools do not require a provider key; most market-data tools do. The hosted OAuth bridge validates the provider key and stores it encrypted using the operator’s configured encryption key. Authorize only a host you trust.

02

Identifiers are part of the contract.

EODData identifies an instrument using an exchange code and a symbol code separately, for example exchange_code="NASDAQ" and symbol_code="AAPL". This is not EODHD’s dotted-ticker syntax.

Use list_exchanges, list_symbols or search_symbols before requesting an unfamiliar instrument. Pass dates as YYYY-MM-DD. Omitting a supported date argument can select the latest available observation, not necessarily today.

Do not invent a currency, exchange, timezone or identifier when a field is absent. Resolve the symbol first, inspect its metadata, and keep the provider’s identifier in subsequent calls.

03

Preserve the meaning of the response.

Single-object tools return the provider object. List tools include a local pagination envelope with pagination and data. Retain the quote’s date, currency and interval, and distinguish close from adjustedClose.

Company, fundamental and technical fields depend on the provider contract and your entitlement. Technical indicators are provider-supplied values; this server does not compute a new investment signal.

An empty list can mean a valid request with no observations. It is not automatically an authentication error. Missing or null values must remain missing—not be converted into a price of zero.

For programmatic access, first send initialize, negotiate capabilities and send notifications/initialized. Use tools/list to inspect schemas, then tools/call with a tool name and arguments. Preserve a session ID if the server supplies one. HTTP endpoints speak MCP JSON-RPC, not a bare REST ticker URL.

04

Smaller output does not mean fewer API calls.

Local limit/offset pagination slices an already-fetched provider response. Calling another page can repeat the upstream request and consume quota again. The provider’s plan controls market coverage, historical depth and request or bandwidth allowances.

When requesting quote history, supply a reasonable start/end range and a supported interval. Fetch only the exchange and symbols needed for the question. Different endpoints have different allowed parameters—consult the tool signature rather than applying a parameter to every tool.

Optional bounded retries may be enabled by the operator. Do not assume an error means the request was never sent upstream. Server-side response and concurrency limits are distinct from provider plan quotas.

Read-only means the tools do not place trades or change provider data. It does not mean requests are free of provider usage charges.

05

Diagnose the boundary, not just the message.

Common connection and data failures
Symptom What to check
401 / authentication error Confirm the auth mode. Use the provider key on v1, or reconnect through OAuth on v2. Never solve this by putting a key in the URL.
403 / entitlement error Check the provider account, product permission and symbol agreement. A valid key may still lack the requested dataset.
404 / unexpected HTML Check the host and the /v1/mcp or /v2/mcp path. A landing page response is not an MCP response.
429 / rate limit Reduce repeated queries and concurrency; respect a returned retry delay. Other applications using the same key also consume its quota.
Timeout / oversized result Narrow dates, symbols or columns where supported. A client timeout should not trigger an unbounded retry loop.
OAuth loop or wrong server Check the advertised issuer, authorization URLs, audience, prefixed discovery routes and service-specific session cookies.
No tools visible Restart or reconnect the MCP client, complete initialization, and approve the server. Check its logs without revealing credentials.
06

Your account. Your access. Your responsibility.

Use HTTPS for hosted access. Keep API keys, session cookies, OAuth tokens and encryption keys out of source control, screenshots and conversations. Rotate a key with the provider if it has been exposed, and reconnect clients afterward.

Server usage statistics are opt-in and disabled by default; a deployment may enable pseudonymous aggregate counts. This static page has no analytics, third-party fonts, tracking pixels or API-key form. The hosting provider may still keep web access logs.

The software’s license does not grant market-data rights. Consult EODData for your permitted usage and any redistribution or business-use permissions. No uptime, latency, exchange coverage or real-time availability is promised here. Data may be delayed, unavailable or restricted by entitlement.

07

A separate host for the server.

This page and the MCP server run on different subdomains. The server lives at : /v1/mcp serves the API-key transport and /v2/mcp serves OAuth.

Each server runs in its own container with its own signing, session, identity and encryption secrets and its own persistent storage. Because it is mounted at the root of its own host, OAuth discovery, issuer and audience need no path prefix.

06 / GOOD TO KNOW

A few final
clarifications.

Do v1 and v2 return different data?

No. They expose the same catalog. The distinction is how you authenticate: your provider key on v1, or the MCP server’s OAuth token on v2.

Can the server trade or manage my portfolio?

No. These tools retrieve data. They do not execute orders, move funds or modify your provider account.

Does this include a data subscription?

No. Bring your own EODData account and key. The provider decides which products, symbols and history you can access; check its current terms directly.

Which AI client should I use?

Choose a client that supports remote Streamable HTTP and the chosen authentication method. OAuth-capable clients use v2; custom-header clients can use v1. The setup panel includes VS Code examples. Local-process MCP clients can use stdio. Client capabilities and plan availability vary.

What should the assistant do with missing data?

Report the missing fields and the provider response. It should not silently substitute another symbol, manufacture values, change price adjustment conventions or imply that an old observation is current.

Is EODData the same as EODHD?

No. This project connects to EODData at eoddata.com. EODHD is a different provider. An EODHD key, dotted ticker example or product entitlement should not be assumed to work here.

MAKE YOUR NEXT QUESTION COUNT.

Bring better inputs
to the conversation.

Set up your connection ↗