daymade/claude-code-skills13 files

Bigdata Skill

>-

Specification
Skill ID
daymade/claude-code-skills/bigdata-skill
Publisher
daymade
Repository
claude-code-skills
Installs
0
Files
13
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

daymade/claude-code-skills/bigdata-skillInstalls these files
  • SKILL.md
  • references/cost_accounting.md
  • references/escape_hatch_architecture.md
  • references/known_pitfalls.md
  • references/verified_api_signatures.md
  • scripts/bigdata_toolkit/__init__.py
  • scripts/bigdata_toolkit/client.py
  • scripts/bigdata_toolkit/cost.py
  • scripts/bigdata_toolkit/kg.py
  • scripts/bigdata_toolkit/rest_ext.py
  • scripts/bigdata_toolkit/retry.py
  • scripts/bigdata_toolkit/search.py
  • scripts/probe_example.py

What this skill tells the agent

Bigdata.com SDK + REST Toolkit

Get the structured substrate the Bigdata.com MCP server doesn't hand over. The MCP returns clean prose and pre-synthesized tearsheets, but its search tool gives chunks with no per-chunk sentiment or entity spans, and its tearsheets give aggregate values — not the fiscal-period time series, universe screener, or per-field JSON you'd build a pipeline on. The official bigdata-client SDK plus a thin REST passthrough over the same backend, same JWT reach the official /v1/* endpoints that hold it. This skill bundles a toolkit that does exactly that — already debugged, already cost-guarded — so you don't re-pay the discovery cost.

The core problem this solves (read this first)

The Bigdata MCP server answers "what's the sentiment around NVIDIA?" with a readable paragraph or a pre-synthesized tearsheet — genuinely useful for a chat turn. But the moment you need the machine-readable substrate to build a pipeline on, the MCP doesn't hand it over:

  • its search tool returns chunks with text + relevance only — no per-chunk sentiment number, no entity character spans;
  • its tearsheets give aggregate values (a single sentiment score, a summary of estimates) — not a fiscal-period time series you can compute on, a universe screener, or per-field JSON.

The fix is a general pattern, not a Bigdata trick:

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.

Crucially, for Bigdata these structured fields are official, publicly documented REST endpoints (docs.bigdata.com/api-reference/...), not a hidden backend — and Bigdata is sunsetting the SDK (EOL 2026-12-31) in favour of this REST API, so the REST layer here is the forward-compatible path, not a hack. The SDK (bigdata_client.Bigdata) covers search + knowledge-graph; `bd._api.http` reaches every /v1/* endpoint the SDK never wrapped. The bundled bigdata_toolkit packages both behind one BigdataClient.

When to use this skill

Trigger on any of these, in any language:

  • The user is using Bigdata.com / RavenPack and the MCP result feels thin — "where's the sentiment score?", "I need entity-level data", "the calendar".
  • They want forward / structured financials for a ticker: analyst estimates, earnings or event calendar, earnings surprise, analyst ratings, price targets, a company screener / universe.
  • They want annotated news chunks with numeric sentiment + entity spans, or a sentiment time series / co-mention graph.
  • They mention a `bd_v2_` API key, rp_entity_id, query_unit / chunk cost, bigdata-client, or "the bigdata MCP isn't enough".
  • They're building an investment-research dataset and need a reusable, cost-aware data-pull layer rather than one-off MCP calls.

Setup (one time)

1 — API key (never hardcode it). The client fail-fasts if it's missing:

export BIGDATA_API_KEY=bd_v2_xxxxxxxx

2 — An isolated Python env with the official SDK. The bundled toolkit imports bigdata_client; install it once:

uv 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/simple

3 — Outbound proxy (only if your network needs one to reach `api.bigdata.com`). Two equivalent options — the official SDK accepts both: an env var, or BigdataClient(proxy=...) in code. The env var is simplest:

export HTTPS_PROXY=http://<host>:<port>     # plus WSS_PROXY for chat/WebSocket

If a proxy does TLS interception (self-signed CA) and you hit SSL handshake errors, the official fix is BigdataClient(verify_ssl="<proxy-CA>.pem") — not blind retries.

4 — Make the bundled package importable by putting this skill's scripts/ on PYTHONPATH (or sys.path.insert(0, "<this-skill>/scripts")).

Smoke-test the whole path (entity resolve + quota are free; --with-search adds one ~1 query_unit chunk search):

BIGDATA_API_KEY=bd_v2_xxx PYTHONPATH=scripts .venv/bin/python scripts/probe_example.py

Quickstart

import 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':...}

Wrap every network call in rc(lambda: ...) — a first-handshake SSL: UNEXPECTED_EOF is common and the SDK's internal retry doesn't cover it.

Routing — which capability answers the question

The user wants…UseModule
Company name / ISIN / CUSIP / SEDOL → rp_entity_idEntityResolver.resolve_id / .resolve_by_isinkg.py (SDK)
Forward analyst consensus (revenue/EPS by fiscal period)StructuredDataREST.analyst_estimatesrest_ext.py
Latest earnings surprise (actual vs estimate).latest_surpriserest_ext.py
Upcoming earnings / event calendar (one name or whole market).events_calendarrest_ext.py
Analyst ratings / price-target consensus.analyst_ratings / .price_targetrest_ext.py
Full financial statements (income / balance / cash-flow, multi-year).income_statement / .balance_sheet / .cash_flow_statementrest_ext.py
TTM valuation metrics & ratios (EV/EBITDA, ROE, P/E, margins).key_metrics_ttm / .company_ratios_ttmrest_ext.py
Company profile (CEO, sector, employees, IPO date).company_profilerest_ext.py
Daily OHLC prices / dividend history.daily_prices / .dividendsrest_ext.py
Revenue by geography / product segment.revenue_geographic_segments / .revenue_product_segmentsrest_ext.py
Daily entity-sentiment time series (don't self-aggregate from chunks!).entity_sentimentrest_ext.py
Co-mention graph (supply-chain / competitor / customer — ⚠️ chunk-billed).connected_entitiesrest_ext.py
Build a universe by market-cap / sector / country.company_screenerrest_ext.py
News/filing/transcript chunks with sentiment + entity spansAnnotatedSearcher.search_entitysearch.py (SDK)
Bulk-pull many searches 50% cheaper (portfolio backfill)BatchSearch (create→upload→poll→download)rest_ext.py
Track / forecast quota spend before a backfillCostTracker / CostModelcost.py
Hit an endpoint the toolkit hasn't wrapped yetclient.http.post("v1/<resource>/query", body)client.py

Use this skill in a project

Open any RiverX project, search the Skills panel for daymade/claude-code-skills/bigdata-skill, and install it in one click.

Use this skill