# mkts Market Data (remote · mkts.io)

Stocks, ETFs, crypto, commodities, forex: quotes, fundamentals, SEC filings, point-in-time history.

- Trust score: 75/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

- remote · `mkts.io`: 75/100 (this document), [markdown](https://verifymcp.io/servers/io-mkts-market-data/api-mcp.md), [page](https://verifymcp.io/servers/io-mkts-market-data/api-mcp)

## Channel facts

- Endpoint: `https://mkts.io/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-06.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2378 tokens (~158/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 20/100
  - Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the mkts Market Data MCP server?

mkts Market Data is a hosted endpoint at https://mkts.io/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http io-mkts-market-data 'https://mkts.io/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "io-mkts-market-data": {
      "url": "https://mkts.io/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "io-mkts-market-data": {
      "type": "http",
      "url": "https://mkts.io/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.io-mkts-market-data]
url = "https://mkts.io/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-mkts-market-data": {
      "type": "remote",
      "url": "https://mkts.io/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-mkts-market-data --url 'https://mkts.io/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-mkts-market-data:
    url: "https://mkts.io/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "io-mkts-market-data": {
      "Transport": "http",
      "Url": "https://mkts.io/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add io-mkts-market-data -t streamable-http -u 'https://mkts.io/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "io-mkts-market-data": {
      "type": "http",
      "url": "https://mkts.io/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-06 (score 75, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-11-05 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 73, +2)

- [security] Tool “get_asset_profile” rewrote its description, which is the text the model reads
- [security] Tool “get_filings” rewrote its description, which is the text the model reads
- [security] Tool “get_fundamentals” rewrote its description, which is the text the model reads
- [security] Tool “screen_assets” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: pass → fail
- [functional improvement] Tool coverage: 43% → 100%
- [functional improvement] Stability: unverified → 0.03
- [functional] Schema quality: good → excellent
- [cosmetic] “screen_assets” reworded the description of “maxChange”
- [cosmetic] “get_asset_intraday” reworded the description of “interval”
- [cosmetic] “get_asset_intraday” reworded the description of “symbol”
- [cosmetic] “get_asset_profile” reworded the description of “symbol”
- [cosmetic] “get_asset_quote” reworded the description of “type”
- [cosmetic] “get_filings” reworded the description of “limit”
- [cosmetic] “get_filings” reworded the description of “symbol”
- [cosmetic] “get_filings” reworded the description of “type”
- [cosmetic] “get_fundamentals” reworded the description of “module”
- [cosmetic] “get_fundamentals” reworded the description of “period”
- [cosmetic] “get_fundamentals” reworded the description of “symbol”
- [cosmetic] “get_news” reworded the description of “category”
- [cosmetic] “get_news” reworded the description of “limit”
- [cosmetic] “get_news” reworded the description of “symbol”
- [cosmetic] “get_price_history” reworded the description of “range”
- [cosmetic] “get_price_history” reworded the description of “symbol”
- [cosmetic] “screen_assets” reworded the description of “direction”
- [cosmetic] “screen_assets” reworded the description of “limit”
- [cosmetic] “screen_assets” reworded the description of “maxPrice”
- [cosmetic] “screen_assets” reworded the description of “minChange”
- [cosmetic] “screen_assets” reworded the description of “minMarketCap”
- [cosmetic] “screen_assets” reworded the description of “minPrice”
- [cosmetic] “screen_assets” reworded the description of “minVolume”
- [cosmetic] “screen_assets” reworded the description of “sector”
- [cosmetic] “screen_assets” reworded the description of “sort”
- [cosmetic] “screen_assets” reworded the description of “type”

### 2026-10-31 (score 71)

First indexed and scored.

## MCP tools (15)

### `compare_assets` (~60 tokens)

Compare assets

Compare 2 to 10 market symbols using the same normalized mkts snapshot. Returns requested and resolved symbols plus normalized asset records with provenance metadata.

Input parameters:

- `symbols` (array, required): Ticker symbols such as AAPL, MSFT, BTC, or EUR/USD.

### `get_archive_series` (~180 tokens)

Get archived daily closes for many symbols over a date range

Get what mkts recorded for up to 100 symbols on every day in a date range, from the immutable point-in-time archive. This is the shape a portfolio backtest actually needs — N symbols by M days in one call, where get_asset_series would take one call per holding and get_assets_as_of one per day. Each row carries observedAt and isRevision, so a later restatement stays visible rather than replacing the original. Days the market was shut are absent, not zero-filled. Limits: 366 days, and symbols multiplied by days must not exceed 10000.

Input parameters:

- `from` (string, required): First date, YYYY-MM-DD.
- `symbols` (array, required): Symbols to fetch, e.g. ["AAPL","MSFT","BTC"].
- `to` (string): Last date, YYYY-MM-DD. Defaults to today.

### `get_asset_intraday` (~258 tokens)

Get intraday observations within a window

Get every price observation mkts made of one symbol inside a time window, rather than just the daily close. Use for intraday movement, timing questions, or checking what a price was doing during a session; use get_asset_series instead for daily closes over months. Cadence is not uniform across the archive — roughly 15 minutes since March 2026 and much sparser before — so the response reports observedIntervalMinutes for the window you asked for, and you should read it before treating the data as fixed bars. interval buckets the result, keeping the last observation in each bucket. Maximum window 92 days; intraday reaches back further on paid tiers.

Input parameters:

- `from` (string): ISO 8601 timestamp or YYYY-MM-DD. Defaults to 24 hours before "to".
- `interval` (string): Bucket size; each bucket keeps its last observation. raw returns every observation without bucketing.
- `symbol` (string, required): Ticker, e.g. BTC, AAPL, EUR/USD.
- `to` (string): ISO 8601 timestamp or YYYY-MM-DD. Defaults to now.
- `type` (string): Only needed when a ticker is shared across asset types. Omit to get the larger by market cap.

### `get_asset_profile` (~211 tokens)

Get asset profile

Look up one asset by symbol and return what it is and where it stands: name, asset type, price, 24h percent change, market cap, 24h volume, sector for stocks and ETFs, supply figures for crypto, and when it was last observed. Served from the mkts snapshot, which refreshes about every 15 minutes, so it is fast and the default for "what is X" or "how is X doing". Use get_asset_quote instead when the user needs the latest print or intraday detail such as day high and low or pre- and post-market prices; use get_assets_bulk for several symbols at once.

Input parameters:

- `symbol` (string, required): Ticker as commonly written: AAPL, BTC, SPY, GC=F for gold futures, EUR/USD for forex, HL-HYPE-PERP for a Hyperliquid perpetual.
- `type` (string): Only needed when a ticker is shared across asset types. Omit to get the larger by market cap.

### `get_asset_quote` (~105 tokens)

Get current asset quote

Get a current quote for a stock, ETF, cryptocurrency, commodity, or forex pair. Returns price fields, market state when available, an observation timestamp, and upstream source.

Input parameters:

- `symbol` (string, required): Ticker, coin ID, or forex pair.
- `type` (string): auto picks the asset the symbol most commonly means (the larger by market cap when a ticker is shared, e.g. META the stock over MetaDAO); set a type to pick the other.

### `get_asset_series` (~207 tokens)

Get archived daily closes over a date range

Get what mkts recorded for one symbol on every day in a date range, from the immutable point-in-time archive. Use this for backtesting rather than calling get_assets_as_of once per day — a 90-day study is one call here and 90 there. Distinct from get_price_history, which fetches OHLCV live from upstream providers: this returns what was observed at the time, with observedAt and isRevision per row, so a later restatement is visible instead of silently replacing the original. Days the market was shut are absent rather than zero-filled. Maximum range 366 days.

Input parameters:

- `from` (string, required): First date in the range, YYYY-MM-DD.
- `symbol` (string, required): Ticker or mkts symbol.
- `to` (string): Last date in the range, YYYY-MM-DD. Defaults to today.
- `type` (string): Only needed when a ticker is shared across asset types. Omit to get the larger by market cap.

### `get_assets_as_of` (~164 tokens)

Get assets as of a past date

Get what mkts recorded about one or more symbols on a specific past date, from the immutable point-in-time archive. Pass a single symbol or up to 100. Use for backtesting, reconstructing a past decision, or checking whether a figure was later revised — not for current prices, which get_assets_bulk serves. Revisions recorded after the requested date are excluded, so results never leak hindsight into a historical decision. Check isExactDate on each result: false means the market was closed and the most recent earlier observation was returned instead.

Input parameters:

- `date` (string, required): The date to look up, YYYY-MM-DD.
- `symbols` (array, required): One or more symbols, e.g. ["AAPL"] or ["AAPL","MSFT","BTC"].

### `get_assets_bulk` (~99 tokens)

Get many assets at once

Get current data for an explicit list of up to 100 symbols in a single call. Use this instead of calling get_asset_quote repeatedly — a watchlist fetched one symbol at a time exhausts the rate limit for no benefit. Returns the resolved assets plus unresolvedSymbols naming anything not tracked, so a short list is never silently short.

Input parameters:

- `symbols` (array, required): Ticker symbols, e.g. ["AAPL","BTC","EUR/USD"].

### `get_filings` (~240 tokens)

Get company filings

List recent SEC filings for a US-listed company or fund, newest first, from SEC EDGAR. Each filing has its date, form type, a plain-language title (for 8-Ks, the events reported), the period it covers, and links to the EDGAR index page and the main document. Use to find the latest 10-K, 10-Q or 8-K, or to see what a company has filed recently. Insider-ownership forms (3, 4, 5, 144) are not included. A fund trust files for all its funds together; sharedFiler in the result marks this, and some filings may concern sibling funds.

Input parameters:

- `limit` (integer): Maximum filings to return, newest first.
- `symbol` (string, required): US ticker of a stock or ETF, e.g. NVDA, BRK-B, SPY.
- `type` (string): Only filings of this exact SEC form type, e.g. 10-K (annual report), 10-Q (quarterly report), 8-K (current report), DEF 14A (proxy statement). Omit for all types.

### `get_fundamentals` (~161 tokens)

Get company fundamentals

Get annual or quarterly financial-statement time series for a stock: income statement, balance sheet and cash flow, built from the company's own SEC filings (source "sec-edgar"), or from the equities provider for funds and companies EDGAR does not cover. Values are in the reporting currency the response names, which is not always USD. Modules can return all statements or a smaller financials, balance-sheet, or cash-flow payload.

Input parameters:

- `module` (string): financials is the income statement (revenue, margins, EPS); choose one module for a smaller response, or all for every statement.
- `period` (string): Fiscal years or fiscal quarters.
- `symbol` (string, required): US stock or ETF ticker, e.g. MSFT.

### `get_macro_snapshot` (~40 tokens)

Get macro snapshot

Get the current mkts macro dashboard, including major equity proxies, crypto, commodities, the US dollar, volatility, and the US 10-year yield.

### `get_market_snapshot` (~31 tokens)

Get global market snapshot

Get the current global cryptocurrency market totals, volume, dominance, active asset counts, and the underlying snapshot timestamp.

### `get_news` (~94 tokens)

Get financial news

Get recent market news from the configured source feeds. Filter by an asset symbol or by markets, crypto, commodities, or forex category. Returns source and publication links.

Input parameters:

- `category` (string): Only feeds covering this market. Omit for all.
- `limit` (integer): Maximum headlines to return, newest first.
- `symbol` (string): Only headlines mentioning this asset, matched on its ticker and name. Overrides category.

### `get_price_history` (~85 tokens)

Get price history

Get bounded daily price history for a symbol. Stocks and ETFs include OHLCV when available; cryptocurrency history may contain close and volume only.

Input parameters:

- `range` (string): How far back from today: one, three or six months, year to date, or one year.
- `symbol` (string, required): Ticker, e.g. AAPL, BTC, GC=F.

### `screen_assets` (~409 tokens)

Screen assets

Find assets matching price, daily-move, volume, market-cap, asset-type and sector filters, sorted as requested. Use for questions like "biggest movers today", "tech stocks over $1T" or "cheapest crypto by price"; all filters are optional and combine with AND. Covers the whole mkts universe (stocks, ETFs, crypto, commodities, forex) from the snapshot, which refreshes about every 15 minutes. Returns at most 25 assets. For valuation or profitability filters such as P/E or margins, this tool does not apply; fetch fundamentals for specific symbols with get_fundamentals.

Input parameters:

- `direction` (string): desc for largest first, asc for smallest first.
- `limit` (integer): Maximum assets to return.
- `maxChange` (number): Maximum 24h change in percent; -5 finds assets down 5% or more.
- `maxPrice` (number): Maximum price in USD (forex: the quoted rate).
- `minChange` (number): Minimum 24h change in percent; 5 means +5%, -3 means -3%.
- `minMarketCap` (number): Minimum market cap in USD; 1000000000000 is $1T. Any value above 0 excludes assets with no market cap, such as forex and many ETFs.
- `minPrice` (number): Minimum price in USD (forex: the quoted rate).
- `minVolume` (number): Minimum 24h volume as reported: shares for stocks and ETFs, USD for crypto.
- `sector` (string): Stocks and ETFs only; exact name, case-insensitive: Technology, Healthcare, Financial Services, Consumer Cyclical, Consumer Defensive, Communication Services, Industrials, Energy, Basic Materials, Re…
- `sort` (string): Field to rank by. Use change24h with direction desc for top gainers, asc for top losers.
- `type` (string): Only this asset class.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-mkts-market-data/api-mcp#diagnostics

## Score history

- 2026-11-06: 75
- 2026-11-05: 75
- 2026-11-04: 74
- 2026-11-03: 74
- 2026-11-02: 73
- 2026-11-01: 73
- 2026-10-31: 71

## Common questions

### What is the mkts Market Data MCP server?

mkts Market Data is an MCP server listed in the public MCP registry as io.mkts/market-data. Stocks, ETFs, crypto, commodities, forex: quotes, fundamentals, SEC filings, point-in-time history. This page covers its hosted endpoint (https://mkts.io/api/mcp).

### Is the mkts Market Data MCP server safe to use?

mkts Market Data scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the mkts Market Data MCP server expose?

mkts Market Data exposes 15 tools: compare_assets, get_archive_series, get_asset_intraday, get_asset_profile, get_asset_quote, and 10 more. Their descriptions and schemas cost roughly 2,344 tokens of context every time the server is loaded.

### Does the mkts Market Data MCP server require authentication?

No. We connected to mkts Market Data without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the mkts Market Data MCP server still maintained?

mkts Market Data is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the mkts Market Data MCP server?

VerifyMCP ran 13 checks on mkts Market Data, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://mkts.io/api/mcp
- Website: https://mkts.io/developers
- Changelog RSS feed: https://verifymcp.io/servers/io-mkts-market-data/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-mkts-market-data/api-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/io-mkts-market-data/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/io-mkts-market-data/api-mcp
