free-etf-flows-mcp
This server provides AI assistants with access to US spot Bitcoin and Ethereum ETF daily flow data and related account information.
Fetch the latest daily net flows for spot Bitcoin (BTC) or Ethereum (ETH) ETFs with
get_latest_etf_flowsQuery historical ETF flows over a custom date range with
query_etf_flows_by_date_rangeFilter historical queries by asset ticker (BTC or ETH)
Retrieve plan and API key upgrade details with
get_pro_access_infoUse it as a remote MCP server or run locally via stdio
Supports summaries, streak and top-fund insights, per-fund breakdowns, and historical data depending on your access plan
ETF Flows MCP Server — Spot Bitcoin & Ethereum ETF Flows for AI Assistants
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.
🌐 Live data pages: Bitcoin ETF flows today · Ethereum ETF flows today · IBIT flows
🔌 Remote MCP server (no install):
https://yasinozen.com/etf-flows/mcp📄 REST API docs: yasinozen.com/etf-flows/api
Quick start: remote server (recommended)
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/mcpCursor / 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 |
| Latest day, 7/30-day, month-to-date, YTD and cumulative flows, streaks and top funds (remote server) |
| Daily totals for the most recent trading days, optional per-fund breakdown |
| Daily totals between two dates |
| Daily flows and cumulative total for one ETF (e.g. IBIT) |
| 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 toolsget_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')
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | No | BTC |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | No | ||
| end_date | Yes | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
get_latest_etf_flows - First observed
get_pro_access_info - First observed
query_etf_flows_by_date_range
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
MCP server giving AI agents one-connection access to crypto & DeFi data: DeFi protocol TVL, stableco
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Agent-native crypto market-data over MCP+REST: order flow, whales, liquidations, calibrated scores
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that delivers cryptocurrency sentiment analysis to AI agents.547MIT
- AlicenseAqualityFmaintenanceAn MCP server that delivers crypto ETF flow data to power AI agents' decision-making.19MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides real-time Bitcoin blockchain and mempool data to AI clients, allowing access to comprehensive Bitcoin network information through various data tools.3110 npm5MIT

blocklens-mcp-serverofficial
AlicenseAqualityDmaintenanceMCP server for Blocklens Bitcoin on-chain analytics, providing AI agents access to 127 on-chain metrics and chart rendering.1544 npmMIT