Skip to main content
Glama
yasinozen35

free-etf-flows-mcp

by yasinozen35

ETF Flows MCP Server — Spot Bitcoin & Ethereum ETF Flows for AI Assistants

Website Remote MCP OpenAPI License

Give Claude, ChatGPT, Cursor, VS Code or any MCP client daily net flows for every US spot Bitcoin and Ethereum ETF — IBIT, FBTC, GBTC, ARKB, ETHA, FETH, ETHE and more.


Claude → Settings → Connectors → Add custom connector → https://yasinozen.com/etf-flows/mcp

Claude Code

claude mcp add --transport http etf-flows https://yasinozen.com/etf-flows/mcp

Cursor / Windsurf / VS Code (mcp.json)

{
  "mcpServers": {
    "etf-flows": {
      "url": "https://yasinozen.com/etf-flows/mcp",
      "headers": { "X-API-Key": "YOUR_KEY" }
    }
  }
}

The key is optional. Clients that cannot send headers can use https://yasinozen.com/etf-flows/mcp?api_key=YOUR_KEY. One-click install links for Cursor and VS Code are on the setup page.

Related MCP server: etf-flow-mcp

Tools

Tool

Description

get_etf_flow_summary

Latest day, 7/30-day, month-to-date, YTD and cumulative flows, streaks and top funds (remote server)

get_latest_etf_flows

Daily totals for the most recent trading days, optional per-fund breakdown

get_etf_flows_by_date_range / query_etf_flows_by_date_range

Daily totals between two dates

get_fund_flows

Daily flows and cumulative total for one ETF (e.g. IBIT)

get_pro_access_info

Plans and how to get a key

Example prompts: “Summarize spot Bitcoin ETF flows this week”, “Did IBIT have outflows in the last 10 days?”, “Compare Ethereum ETF flows in August and September.”

Run locally (stdio)

Requires uv.

{
  "mcpServers": {
    "etf-flows": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/free-etf-flows-mcp", "run", "python", "mcp_server.py"],
      "env": { "ETF_FLOWS_API_KEY": "YOUR_KEY" }
    }
  }
}

Plans

Preview (no key)

Free key

Pro ($9.99/mo)

History

7 trading days

90 trading days

Full, since Jan 2024

Delay

1 day

1 day

Same day

Per-fund data

–

✓

✓

CSV export

–

–

✓

Rate limit

10/min

30/min

120/min

👉 Get a free key · Upgrade to Pro

Data

Daily figures are sourced from the public ETF flow tables of Farside Investors and normalized to US dollars (parenthesized values become negative). See the methodology. This project is independent and not affiliated with Farside Investors or any ETF issuer. Not investment advice.


Built by Yasin Özen ·

Available Tools

3 tools
get_latest_etf_flowsAInspect

Fetch the most recent Spot ETF flow records for a given ticker (BTC or ETH).

Args: ticker: The asset ticker, either 'BTC' or 'ETH' (default 'BTC')

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerNoBTC

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It identifies the operation as a read ('Fetch') and specifies the ticker scope, but does not disclose details like whether multiple records are returned, ordering, or any side effects. It implicitly indicates read-only behavior but lacks explicit confirmation.

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 appropriately concise, with a single purpose statement and an args section that directly explains the only parameter. There is no redundant or filler content; every sentence contributes value.

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?

Given the tool's simplicity (one optional parameter) and the existence of an output schema, the description provides the essential purpose and parameter semantics. It does not mention alternatives or edge cases, but for a basic read tool this is sufficient for correct selection and invocation.

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

Parameters5/5

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

The schema provides no property descriptions (0% coverage), so the description compensates fully by explaining the 'ticker' parameter with its valid values ('BTC' or 'ETH') and default of 'BTC'. This adds clear meaning beyond the raw type and default in the schema, leaving no ambiguity about the parameter.

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 clearly states the tool's function with a specific verb ('Fetch') and resource ('Spot ETF flow records'), scoped to the most recent records for a given ticker. It distinguishes itself from sibling tools like query_etf_flows_by_date_range, which focuses on date-range queries.

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 description provides clear context that this tool is for retrieving the latest ETF flows for a ticker, implying its use case. However, it does not explicitly mention alternatives or when not to use it, such as using query_etf_flows_by_date_range for historical data. This is a minor gap in guidance.

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

get_pro_access_infoAInspect

Get information on how to upgrade to a Pro API Key for unlimited real-time Spot ETF flow queries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It specifies the subject of the information (upgrade to Pro) but does not describe the response format, whether authentication is needed, or explicitly state it is a read-only operation. The word 'Get' implies safety but adds limited detail beyond the name.

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 a single, concise sentence that fully conveys the tool's purpose without any wasted words. It is front-loaded and easy to parse.

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?

For a zero-parameter informational tool with an output schema, the description is sufficient. It clearly indicates what the tool provides and requires no further elaboration.

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 has zero parameters, so the description does not need to add parameter meaning. Baseline of 4 for zero-parameter tools applies.

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 clearly states the tool provides information on upgrading to a Pro API Key for unlimited real-time Spot ETF flow queries, using the specific verb 'Get' and a clear resource. It distinguishes itself from sibling tools that query flow data directly.

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 description implies the use case (wanting to upgrade to Pro) and the context is clear from the sibling tool names, but it does not explicitly state when not to use this tool or name alternatives. Still, the purpose is self-evident enough for an agent to select it appropriately.

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

query_etf_flows_by_date_rangeAInspect

Query historical ETF flows within a specific date range.

Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format ticker: Optional asset ticker ('BTC' or 'ETH') to filter the query

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerNo
end_dateYes
start_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden. It indicates a read-only query operation, but does not disclose potential rate limits, authentication requirements, or edge-case behavior like empty results. It adds date-range context but lacks deeper behavioral details.

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 minimal and front-loaded with a clear one-sentence purpose, followed by a compact parameter list. No unnecessary words or repetition; every line adds value.

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?

Given the tool has an output schema (so return values are covered) and a low-complexity parameter set, the description is mostly complete. However, it does not mention whether the date range is inclusive or how to filter for both assets, leaving minor gaps.

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?

Schema coverage is 0%, so the description compensates by specifying date format ('YYYY-MM-DD') and the allowed ticker values ('BTC' or 'ETH'). This adds meaning beyond the bare parameter names in the schema, though it does not clarify the default behavior when ticker is omitted.

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 clearly states the tool's function: 'Query historical ETF flows within a specific date range.' The verb 'query' and resource 'historical ETF flows' are specific, and the date-range scope distinguishes it from sibling tools like get_latest_etf_flows.

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 description implies historical, date-scoped usage, which contrasts with the 'latest' in get_latest_etf_flows. However, it does not explicitly name alternatives or state when not to use this tool, so it falls short of full guidance.

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_etf_flows
    • First observedget_pro_access_info
    • First observedquery_etf_flows_by_date_range

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct purpose: one fetches latest flows, one queries a date range, and one provides account upgrade info. No overlap or ambiguity in their roles.

Naming Consistency4/5

All names follow a verb-noun pattern, but 'query' in the second tool is a slight deviation from the 'get' used in the other two. Overall, names are clear and predictable.

Tool Count4/5

Three tools is a reasonable count for a focused ETF flow server, though it sits at the lower boundary of the typical well-scoped range. The purpose is narrow, so the count feels appropriate.

Completeness4/5

The tools cover the core data retrieval needs: latest flows and historical range queries. A minor gap is the lack of a direct 'get all flows' without a date range, but users can work around with broad dates. The pro access tool adds useful context.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers