Skip to main content
Glama
UnbiasedAlpha

AuraStream MCP

aurastream-mcp

An MCP server for AuraStream, the unified historical data API. It lets Claude Desktop, Claude Code, ChatGPT and other MCP clients pull OHLCV bars (and, for some sources, funding rates, trades, quotes, order books and earnings) from crypto exchanges, Yahoo Finance, Oanda, Alpaca, Polygon and others, plus macro, positioning and trade-flow data such as FRED, CFTC Commitments of Traders, FINRA short interest, SEC insider trades and UK/EU/US/Hong Kong metals trade, through one tool.

Ask "plot BTC daily closes for Q1 from Binance", "compare SPY and QQQ drawdowns this year" or "how have hedge funds positioned in gold futures since 2020?" and the model calls AuraStream for the data.

Tools

Tool

What it does

list_sources()

Sources, asset classes, ticker formats, intervals, supported dtypes and source-specific parameters, and whether provider credentials are needed and configured. No API call.

get_timeseries(source, tickers, start, end, interval="1d", dtype="bars", price_type=None, instrument=None, assetclass=None, category=None, feed=None, frequency=None, dataset=None, report=None, options=None, as_of=None, concepts=None, period=None, mode=None, reporter=None, max_rows=100)

Calls POST /timeseries. Returns one CSV block per ticker (timestamp,Open,High,Low,Close,Volume for market bars, the source's own fields otherwise), capped at the most recent max_rows rows (max 1000) with the total row count noted.

get_latest(source, tickers, interval="1d", bars=10)

The most recent N bars per ticker, without picking dates.

Each get_timeseries / get_latest call is one AuraStream API call.

Sources exposed:

Group

Sources

Market data

binance, bybit, kraken, yahoo, firstrate; with your own account: oanda, alpaca, polygon

Macro and energy

treasury, worldbank; with a free key: fred, eia

Fundamentals

edgar (insider trades, reported financials); with your own key: finnhub

Positioning and flows

cftc (Commitments of Traders), finra (short interest), hmrc, comext, hktrade; with a free key: uscensus

Crypto fundamentals and news

defillama, gdelt

Dates are YYYY-MM-DD. Intervals follow the API: upper-case M is minutes, lower-case m is months (15M = 15 minutes, 1m = one month). The server checks intervals, dtypes and parameters against each source's documented values before calling the API.

Related MCP server: Data Puller MCP Server

Install

Requires Python 3.10+.

pip install "git+https://github.com/UnbiasedAlpha/aurastream-mcp"

A PyPI release (pip install aurastream-mcp / uvx aurastream-mcp) is planned; the snippets below work the same either way.

This installs an aurastream-mcp command. Check it with aurastream-mcp --help.

Configuration

All secrets come from environment variables. Provider credentials are never tool arguments, so they never pass through the chat or the model.

Variable

Needed for

AURASTREAM_API_KEY

Everything. Get a free key from the dashboard.

OANDA_ACCOUNT_ID, OANDA_TOKEN

oanda

OANDA_ENVIRONMENT

oanda, optional: practice (default) or live

ALPACA_API_KEY, ALPACA_SECRET_KEY

alpaca

POLYGON_API_KEY

polygon

FRED_API_KEY

fred

FINNHUB_API_KEY

finnhub

EIA_API_KEY

eia (free at eia.gov)

CENSUS_API_KEY

uscensus (free at census.gov)

EDGAR_USER_AGENT

edgar: your name and contact email, e.g. Your Company contact@yourcompany.com. The SEC requires it; no registration.

Set only the ones you use. list_sources tells the model which sources are configured.

Claude Desktop

Edit claude_desktop_config.json (Settings > Developer > Edit Config):

{
  "mcpServers": {
    "aurastream": {
      "command": "aurastream-mcp",
      "env": {
        "AURASTREAM_API_KEY": "your-aurastream-key",
        "OANDA_ACCOUNT_ID": "101-004-12345678-001",
        "OANDA_TOKEN": "your-oanda-token"
      }
    }
  }
}

If Claude Desktop can't find the command, use the full path (e.g. C:\\Users\\you\\venv\\Scripts\\aurastream-mcp.exe or /Users/you/venv/bin/aurastream-mcp). Restart Claude Desktop afterwards.

Claude Code

claude mcp add aurastream -e AURASTREAM_API_KEY=your-aurastream-key -- aurastream-mcp

Add -e FRED_API_KEY=... etc. for credentialed sources, and --scope user to make it available in every project.

ChatGPT (remote connector)

ChatGPT only talks to remote MCP servers over HTTPS, so run the server in HTTP mode somewhere reachable and register the URL as a connector (Settings > Connectors, developer mode).

AURASTREAM_API_KEY=your-key aurastream-mcp --http --host 127.0.0.1 --port 8000
# endpoint: http://127.0.0.1:8000/mcp

Put it behind something that gives you a public HTTPS URL (a reverse proxy with TLS, or a tunnel such as Cloudflare Tunnel or ngrok), then tell the server which public host name to accept:

aurastream-mcp --http --port 8000 --allowed-host mcp.example.com

and add https://mcp.example.com/mcp in ChatGPT. Requests with any other Host header are rejected (DNS-rebinding protection).

How the API key works in HTTP mode. If the client sends x-api-key: <key> or Authorization: Bearer <key>, that key is used. Otherwise the server falls back to AURASTREAM_API_KEY. The fallback is what makes ChatGPT work today, but it also means anyone who knows the URL spends your allowance and uses your provider credentials. Treat the HTTP mode as single-user self-hosting: keep the URL private, or put it behind your own auth. For clients that can send headers, start with --require-client-key to disable the fallback. Provider credentials always come from the server's environment.

Other options

aurastream-mcp [--http] [--host HOST] [--port PORT] [--path /mcp]
               [--allowed-host HOST ...] [--require-client-key]

AURASTREAM_API_URL overrides the endpoint (useful for testing).

Example prompts

  • "What sources does AuraStream have for forex?"

  • "Get daily BTCUSDT and ETHUSDT from Binance for 2025 and compute their 30-day rolling correlation."

  • "Show the last 20 hourly bars of EUR_USD from Oanda."

  • "Pull UNRATE and DFF from FRED since 2015 and describe how they moved together."

  • "Show Binance BTCUSDT perpetual funding rates for June 2025."

  • "How has managed-money positioning in gold futures (CFTC) changed since 2020?"

  • "Which AAPL insiders bought or sold shares in 2024?"

  • "Show monthly UK gold exports to Switzerland since 2020."

  • "Fetch SPY and QQQ daily from Yahoo for the last 6 months and compare max drawdowns."

Limits

  • Historical data, not a real-time feed. The last bar may still be forming.

  • Every data call counts against your monthly AuraStream allowance (free plan: 500 calls/month). When it runs out the tool says so; it resets on the 1st at 00:00 UTC. The free plan also allows about 1 request per second.

  • Results are capped per ticker (default 100 rows, max 1000) to keep the model's context manageable. For long, fine-grained histories use the REST API or the Python client directly.

  • The API times out after 120 seconds; split very large requests.

  • Interval support varies by source (see the docs).

Known issues

  • Credential field names. The API docs name the provider credential fields api_key (Polygon, FRED, Finnhub) and api_key / secret_key (Alpaca), while the AuraStream backend library reads key (and secret for Alpaca). Until that is settled, the server sends each value under both names, e.g. {"api_key": k, "key": k}. This has not been tested against the live API yet.

  • FirstRate has no docs page; its ticker format and intervals are not documented, so the server only applies the general interval list.

  • Non-bar data (funding, order book, trades, quotes, earnings, Finnhub financials and the macro, positioning and trade sources) is rendered generically as a table and has not been checked against live responses.

  • Several sources are stamped at the period they describe but published later (EIA, FINRA short interest, the trade sources). list_sources notes the lag; shift the data before backtesting.

  • GDELT search queries are throttled by GDELT itself; keep ranges short. dataset="themes" is not throttled.

Development

python -m venv .venv
.venv/Scripts/activate        # or: source .venv/bin/activate
pip install -e ".[test]"
pytest

The tests mock all HTTP calls; no API key is needed.

License

MIT. See LICENSE.

Available Tools

3 tools
get_latestA
Read-onlyIdempotent

Return the most recent N bars (OHLCV) per ticker, without having to pick dates. Uses one unit of the monthly AuraStream allowance. Data is historical/delayed, not a live quote; the last bar may still be forming.

ParametersJSON Schema
NameRequiredDescriptionDefault
barsNoHow many of the most recent bars to return per ticker.
sourceYesData source id, see list_sources.
tickersYesTickers in the source's own format.
intervalNoBar size, e.g. 1h or 1d.1d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses key behavioral traits: it consumes one unit of the monthly AuraStream allowance, returns historical/delayed data rather than live quotes, and notes that the last bar may still be forming. These are exactly the caveats an agent needs before calling the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the purpose and followed by quota and data-quality caveats. Every sentence adds useful information with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full parameter documentation, and annotations already covering safety and idempotency, the description supplies the remaining quota and delayed-data caveats. It could explicitly name get_timeseries as the alternative, but it is otherwise complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters including enums and defaults. The description reinforces that bars are returned per ticker but adds no syntax or constraints beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: return the most recent N OHLCV bars per ticker. The phrase 'without having to pick dates' implicitly contrasts with get_timeseries, but it does not explicitly name the sibling, so the differentiation is clear but not fully explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without having to pick dates' signals the convenience scenario, but the description never names get_timeseries or states when not to use this tool. The alternative is left to inference rather than explicitly routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_timeseriesA
Read-onlyIdempotent

Fetch historical data from AuraStream and return it as a CSV table per ticker (timestamp,Open,High,Low,Close,Volume for market bars; source-specific fields otherwise, see list_sources). Long results are cut to the most recent max_rows rows per ticker, with the total row count noted. Each call uses one unit of the user's monthly AuraStream allowance. Provider credentials come from the server's environment; never ask the user to paste them.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesEnd date, YYYY-MM-DD.
feedNoalpaca only: iex (default) or sip (needs a paid Alpaca plan).
modeNogdelt search queries only: share of coverage (default), article count, or tone.
as_ofNocftc only: stamp at Friday publication (release, default, no look-ahead) or Tuesday position date (report).
dtypeNo'bars' everywhere; binance also 'funding'/'orderbook'; oanda also 'orderbook'; alpaca also 'trades'/'quotes'; yahoo also 'earnings'.bars
startYesStart date, YYYY-MM-DD.
periodNoedgar financials only: quarter (default) or annual.
reportNocftc only; default depends on the symbol.
sourceYesData source id, see list_sources.
datasetNofinra: short_interest (default) or short_volume. edgar: insider (default) or financials. gdelt: themes.
optionsNocftc only: include options (futures-equivalent).
tickersYesTickers in the source's own format, e.g. ['BTCUSDT'] for binance, ['EUR_USD'] for oanda, ['SPY'] for yahoo, ['GC'] for cftc, ['gold:CH'] for hmrc. Batch several tickers in one call.
categoryNobybit only: linear (default) or inverse.
conceptsNoedgar financials only: XBRL concepts, e.g. ['Revenues'].
intervalNoBar size: upper-case M is minutes, lower-case m is months (15M = 15 minutes, 1m = one month). Support varies by source (list_sources shows each source's intervals).1d
max_rowsNoMax rows returned per ticker; the most recent rows are kept.
reporterNocomext only: EU27_2020 (default) or a member state, e.g. DE.
frequencyNofred and finnhub only: quarterly (default) or annual.
assetclassNoalpaca only.
instrumentNobinance: spot (default) or perpetual (needed for dtype funding). kraken: futures (default) or spot.
price_typeNooanda only: A ask (default), B bid, M mid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses CSV return shape, per-ticker structure, truncation to the most recent max_rows rows with total count noted, monthly allowance consumption, and environment-based credential handling. These are meaningful behavioral details that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and return format, then covers truncation, cost, and credentials. Every sentence contributes operational information without excess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and 100% parameter description coverage, the description supplies the key missing operational context: CSV output, truncation behavior, allowance cost, and credential handling. An agent has enough information to call it correctly and route source-specific details to list_sources.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter semantics are already largely handled by the schema. The description adds useful context for max_rows truncation and source-specific field discovery via list_sources, but it does not materially explain the many source-specific parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetch historical AuraStream data and return it as a CSV table per ticker. It also distinguishes the historical nature from the sibling get_latest and points to list_sources for source-specific fields.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes this tool as the historical-data fetch path and references list_sources for source-specific fields. It does not explicitly contrast with get_latest, but the historical framing and sibling naming make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sourcesA
Read-onlyIdempotent

List the AuraStream data sources: what each covers, ticker format, intervals, supported dtypes, optional source-specific parameters, the fields returned when they are not OHLCV, and whether provider credentials are needed and configured. Free to call (does not use the API allowance).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent, so the remaining value is cost and prerequisites, and the description delivers both: 'Free to call (does not use the API allowance)' and a note that it reports whether provider credentials are needed and configured. That is exactly the kind of context annotations cannot express. It does not state pagination or ordering behavior, keeping it at 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the verb and resource, and every clause carries information (formats, fields, credentials, cost). The enumeration is long but none of the items is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter discovery tool with a full output schema, the description covers purpose, cost, and credential prerequisites, which is nearly everything an agent needs. The only gap is an explicit instruction on when to prefer this over calling get_timeseries directly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the schema to document and the baseline is 4. The description still uses the space usefully by explaining that some sources have source-specific parameters, which prepares the agent for what the output will contain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('List the AuraStream data sources') and then enumerates exactly what the listing contains: coverage, ticker format, intervals, dtypes, optional source params, non-OHLCV fields, and credential status. That is far more specific than siblings get_timeseries/get_latest, which retrieve data rather than describe it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The subject matter makes the when-to-use clear (discover sources, formats and credential requirements before fetching), and being a zero-parameter catalog it has no per-call conditions to state. It does not explicitly say 'call this before get_timeseries' or name the alternatives, so it stops short of a 5.

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.

  1. 3 tool updatesv0.1.0
    • First observedget_latest
    • First observedget_timeseries
    • First observedlist_sources

TDQS

A4.2/5.0

Scored across 3 tools

Disambiguation4/5

Each tool maps to a distinct step: discovery (list_sources), bounded historical fetch (get_timeseries), and a convenience recent-bars fetch (get_latest). get_timeseries and get_latest overlap substantially since the latter is effectively a date-free subset of the former, but the descriptions clearly frame get_latest as the 'don't pick dates' shortcut.

Naming Consistency5/5

All three tools are snake_case verb-first names (list_/get_/get_) that read predictably and map loosely to resource retrieval. No mixed conventions or cryptic abbreviations.

Tool Count4/5

Three tools is on the lean side but each earns its place: source discovery, ranged history, and latest bars. A small read-only data-fetch server doesn't need a larger surface, though it sits near the thin end.

Completeness4/5

The read-only retrieval lifecycle (discover sources → fetch history → fetch recent bars) is fully covered with no dead ends for the core workflow. Notable gap: every metered call consumes monthly allowance, yet there is no tool to check remaining quota/usage, and no ticker search or validation helper.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • Live crypto + IDX stock market intelligence for AI agents — 19 tools, no API key.

  • > TradingMCP puts a market analyst inside your AI assistant. Paste one URL into Claude, ChatGPT, Cursor, VS Code or any MCP client and ask in plain language: screen for breakouts, run a multi-timeframe analysis, backtest a strategy with walk-forward validation, scan for smart-money and volume signals, or get a one-prompt morning market brief. In clients that support MCP Apps, price charts and the Markets panel are drawn right in the chat. > 40+ tools covering crypto (real-time), stocks, ETFs, FX, futures and commodities across major global exchanges. > Hosted, nothing to install: Pro $9/month (2,500 tool calls) or Pro+ $29/month (10,000). Paid upfront with a 14-day money-back guarantee; your API key arrives right after checkout. > Built on the open-source tradingview-mcp core (MIT, ~5k GitHub stars): self-host it free, or use the hosted version with zero ops. > For research and education, not financial advice. Not affiliated with TradingView

  • Financial data MCP server for Claude, ChatGPT, Cursor and Codex. Real-time stock quotes, financial statements, options flow, SEC filings, insider trades, 13F holdings, macro data and market news from gloom.sh, the open-source Bloomberg Terminal alternative.

  • Agent-native crypto market-data over MCP+REST: order flow, whales, liquidations, calibrated scores

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP-compatible AI clients to access live crypto market data and AI-driven quantitative analysis, with structured outputs and full observability.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables fetching live crypto market data from Binance, Bybit, and Hyperliquid via MCP tools, including klines, orderbook, funding rates, technical indicators, and market breadth for real-time analysis by LLMs.
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI agents to discover, validate, and fetch verified crypto and US-equity market data, including quality-flagged OHLCV bars, leakage-safe features, funding, open interest, order flow, context, events, and regime labels. It supports free catalog discovery and x402 USDC payments per call.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to pull crypto discovery, rankings, and market-cap data from CoinMarketCap, Fed macro and liquidity series with point-in-time vintages via FRED/ALFRED, and a curated, sourced FOMC hike/cut/hold decision calendar. It exposes eight MCP tools whose API credentials are resolved server-side, and also feeds bounded, checkpointed ingestion streams through the agent-connector-sdk source adapter.
    MIT