Loading...
Loading...
Pull Bigdata.com (RavenPack) financial and news data through the official `bigdata-client` SDK and its public `/v1/*` REST endpoints when the Bigdata MCP server returns only pre-synthesized tearsheets but you need the machine-readable substrate underneath. MCP search returns prose chunks (text + relevance only — no per-chunk sentiment, no entity spans); its tearsheets give only aggregate values, not computable time series or per-field JSON. This skill bundles a verified, cost-guarded toolkit over the official REST API: annotated chunk search, entity/ISIN resolution, analyst estimates, calendar/surprise/ ratings/targets, financial statements, TTM metrics & ratios, prices, dividends, revenue segments, a daily entity-sentiment series, co-mention graph, screener, and batch search. Use it whenever the user mentions Bigdata.com, RavenPack, a `bd_v2_` key, the bigdata MCP, rp_entity_id, chunk/query_unit cost, or wants structured financials, fundamentals, prices, sentiment, or annotated news.
npx skill4agent add daymade/claude-code-skills bigdata-skillbigdata-client/v1/*When an MCP data source returns only synthesized output but you need the structured fields underneath, drop to the vendor SDK or REST. MCP optimizes for a chat turn, not a pipeline.
docs.bigdata.com/api-reference/...bigdata_client.Bigdatabd._api.http/v1/*bigdata_toolkitBigdataClientbd_v2_rp_entity_idquery_unitbigdata-clientexport BIGDATA_API_KEY=bd_v2_xxxxxxxxbigdata_clientuv venv .venv --python 3.12
uv pip install --python .venv/bin/python bigdata-client
# Behind a slow/blocked PyPI (e.g. mainland China) add a mirror, and unset any
# outbound proxy for the install step so uv reaches the index directly:
# --index-url https://pypi.tuna.tsinghua.edu.cn/simpleapi.bigdata.comBigdataClient(proxy=...)export HTTPS_PROXY=http://<host>:<port> # plus WSS_PROXY for chat/WebSocketBigdataClient(verify_ssl="<proxy-CA>.pem")scripts/PYTHONPATHsys.path.insert(0, "<this-skill>/scripts")--with-searchBIGDATA_API_KEY=bd_v2_xxx PYTHONPATH=scripts .venv/bin/python scripts/probe_example.pyimport sys
sys.path.insert(0, "<this-skill>/scripts") # so `import bigdata_toolkit` resolves
from bigdata_toolkit import (
BigdataClient, EntityResolver, AnnotatedSearcher,
StructuredDataREST, CostTracker, CostModel, rc, # rc = SSL-retry wrapper
)
c = BigdataClient() # SDK + REST escape hatch, one object
er = EntityResolver(c)
nvda = rc(lambda: er.resolve_id("NVIDIA", country="US")) # -> 'E09E2B' (rp_entity_id is the gateway key)
# --- Structured financials the MCP does NOT expose (REST escape hatch) ---
rest = StructuredDataREST(c)
est = rc(lambda: rest.analyst_estimates(nvda, period="quarter", limit=5)) # forward consensus
surp = rc(lambda: rest.latest_surprise(nvda)) # last EPS/revenue surprise
cal = rc(lambda: rest.events_calendar(nvda, categories=["earnings-call"],
start_date="2026-06-01", end_date="2026-12-31"))
# --- Annotated chunks the MCP STRIPS: sentiment + entity spans (cost-guarded) ---
s = AnnotatedSearcher(c)
docs = rc(lambda: s.search_entity(nvda, keyword="data center", chunk_limit=10))
# each chunk dict: {"sentiment": float, "entities": [{"key": rp_id, "start", "end"}], "text", ...}
# --- Always know your spend (chunk-billed; see Cost discipline) ---
ct = CostTracker(c); ct.snapshot()
# ... run a batch ...
print(ct.delta()) # {'delta_chunks':..., 'delta_query_units':..., 'usd_fast':...}rc(lambda: ...)SSL: UNEXPECTED_EOF| The user wants… | Use | Module |
|---|---|---|
Company name / ISIN / CUSIP / SEDOL → | | |
| Forward analyst consensus (revenue/EPS by fiscal period) | | |
| Latest earnings surprise (actual vs estimate) | | |
| Upcoming earnings / event calendar (one name or whole market) | | |
| Analyst ratings / price-target consensus | | |
| Full financial statements (income / balance / cash-flow, multi-year) | | |
| TTM valuation metrics & ratios (EV/EBITDA, ROE, P/E, margins) | | |
| Company profile (CEO, sector, employees, IPO date) | | |
| Daily OHLC prices / dividend history | | |
| Revenue by geography / product segment | | |
| Daily entity-sentiment time series (don't self-aggregate from chunks!) | | |
| Co-mention graph (supply-chain / competitor / customer — ⚠️ chunk-billed) | | |
| Build a universe by market-cap / sector / country | | |
| News/filing/transcript chunks with sentiment + entity spans | | |
| Bulk-pull many searches 50% cheaper (portfolio backfill) | | |
| Track / forecast quota spend before a backfill | | |
| Hit an endpoint the toolkit hasn't wrapped yet | | |
returnincome/balance/cash-flow/daily-prices/dividends/revenue-segments— wrap them in{fields, values}to getfields_values_to_records(). The[{field: value}]/*_ttmendpoints are already flat. All structured endpoints above are free (0 chunks) exceptcompany_profileandconnected_entities(chunk-billed).AnnotatedSearcher
| Face | Path | A-share / Chinese verdict |
|---|---|---|
| Structured financial (estimates, calendar, surprise, ratings, target, screener, financials, prices, dividends, revenue segments, daily entity-sentiment) | REST ( | Works — via |
| Unstructured Chinese NLP (Chinese-news entity detection, per-chunk Chinese sentiment) | SDK search ( | Dead end — a data-source-level gap, not an SDK bug: Chinese entity detection ≈ 0, per-chunk CJK sentiment is a doc-level inherited value, and |
1 query_unit = 10 chunks/v1/*connected_entitiesAnnotatedSearcherChunkLimitintSearch.run(int)ChunkLimit(n)AnnotatedSearcher.searchChunkLimitChunkLimitmax_chunksrerank_threshold$0.0075$0.015BatchSearchCostModelCostTracker.snapshot()delta()references/cost_accounting.mdreferences/known_pitfalls.mdSSL: UNEXPECTED_EOFrc()All(entity, Keyword(kw))TypeError&entity & Keyword(kw)AllAnnotatedSearcher.entity_queryChunkLimitintrc(lambda q=q, dr=dr: ...)analyst_estimates(period="quarter")limit≈20company_screener"filters"Document.reporting_periodNonefetch_reporting_period_rawBigdataClientBIGDATA_API_KEYuploadsNotImplementedErrorreferences/verified_api_signatures.mddocs.bigdata.com/llms.txtbigdata-skill/
├── SKILL.md # this file — routing + setup + quickstart
├── scripts/
│ ├── bigdata_toolkit/ # the verified, cost-guarded package
│ │ ├── client.py # BigdataClient: SDK (.bd) + REST escape hatch (.http/.conn)
│ │ ├── kg.py # EntityResolver: name/ISIN/CUSIP/SEDOL → rp_entity_id
│ │ ├── search.py # AnnotatedSearcher: chunks + sentiment + entity spans (SDK)
│ │ ├── rest_ext.py # StructuredDataREST (estimates/financials/prices/dividends/sentiment/co-mentions/screener) + BatchSearch + fields_values_to_records — official REST
│ │ ├── cost.py # CostTracker + CostModel: chunk billing + budget veto
│ │ └── retry.py # rc(): SSL/transient-error retry passthrough
│ └── probe_example.py # runnable end-to-end smoke test
└── references/
├── escape_hatch_architecture.md # WHY the MCP is lossy; bd._api.http mechanism; adding endpoints
├── verified_api_signatures.md # L4/L3-verified signatures + the two data faces, with evidence
├── cost_accounting.md # chunk billing, the 52x trap, CostModel/CostTracker, budgeting
└── known_pitfalls.md # every pitfall above, with reproduction + fix| Read when you need to… | File |
|---|---|
Understand why the MCP is insufficient and how the REST escape hatch works (and how to wrap a new | |
| Look up an exact verified method signature + its verification level | |
| Budget a backfill or debug a surprise quota burn | |
| Diagnose an error you hit while pulling data | |