Data source: SEC EDGAR (N-PORT-P)
https://context.gnist.ai/mcp/etf/
AuthenticationAll requests require a Gnist-API-Key header (or api_key query parameter).
Free tier: 100 calls/day. Get your API key.
Tools (3)
get_etf_holdingsGet top portfolio holdings for an ETF or mutual fund.
Returns the largest holdings by market value from the fund's most recent
N-PORT-P filing (quarterly portfolio disclosure filed with SEC).
Each holding includes name, CUSIP, market value, percentage of NAV,
share count, asset category, and country of domicile.
Examples:
get_etf_holdings("SPY") → Top 25 holdings of SPDR S&P 500 ETF
get_etf_holdings("QQQ", limit=10) → Top 10 Invesco QQQ holdings
get_etf_holdings("VTI", limit=50) → Top 50 Vanguard Total Stock Market
Returns:
Fund name, report date, net assets, total holding count,
and a list of holdings with value, weight, and classification.
| Parameter | Type | Required | Description |
|---|---|---|---|
ticker_or_cik | string | required | ETF or mutual fund ticker (e.g. "SPY", "QQQ", "VTI") or numeric CIK. |
limit | integer | optional | Maximum holdings to return, sorted by market value (default 25). (default: 25) |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_etf_holdings",
"arguments": {
"ticker_or_cik": "example"
}
}
}get_etf_allocationGet asset allocation breakdown for an ETF or mutual fund.
Returns portfolio composition grouped by asset category (equity, debt,
derivatives, etc.) and by country — from the most recent N-PORT-P filing.
Useful for understanding an ETF's diversification, geographic exposure,
and asset mix without reading the full holdings list.
Examples:
get_etf_allocation("SPY") → S&P 500 ETF allocation (mostly US equity)
get_etf_allocation("BND") → Vanguard Bond ETF allocation (debt categories)
get_etf_allocation("VT") → Vanguard Total World — global country breakdown
Returns:
Fund info, asset category breakdown with NAV percentages,
and country breakdown with NAV percentages.
| Parameter | Type | Required | Description |
|---|---|---|---|
ticker_or_cik | string | required | ETF or mutual fund ticker (e.g. "SPY", "QQQ", "BND") or numeric CIK. |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_etf_allocation",
"arguments": {
"ticker_or_cik": "example"
}
}
}report_feedbackReport a bug, feature request, or general feedback for this data source.
Use this when something doesn't work as expected, when you'd like
a new feature, or when you have suggestions for improvement.
Args:
feedback: Describe the issue or suggestion.
feedback_type: One of 'bug', 'feature_request', or 'general'.
| Parameter | Type | Required | Description |
|---|---|---|---|
feedback | string | required | |
feedback_type | string | optional | (default: "general") |
{
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "report_feedback",
"arguments": {
"feedback": "example"
}
}
}Quick Start
curl -X POST "https://context.gnist.ai/mcp/etf/" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Gnist-API-Key: YOUR_API_KEY" \
-d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "get_etf_holdings", "arguments": {"ticker_or_cik": "example"}}}'
import httpx
resp = httpx.post(
"https://context.gnist.ai/mcp/etf/",
headers={"Gnist-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
json={
"jsonrpc": "2.0",
"method": "tools/call",
"id": 1,
"params": {
"name": "get_etf_holdings",
"arguments": {
"ticker_or_cik": "example"
}
}
},
)
print(resp.json())