Skip to main content
The data tools family covers market data retrieval and progressive skill discovery. It contains three direct tools: market_get_ohlcv for raw price bars, search_skills for finding skill-backed data sources, and describe_skill for reading a skill’s full manifest before running it.

market_get_ohlcv

Fetch OHLCV (open, high, low, close, volume) bars for a symbol. The response is wrapped in a provenance envelope that records the upstream provider, the fetch timestamp, and a content hash — so every data point is auditable and reproducible.

Arguments

ArgumentTypeRequiredDescription
symbolstringYesTicker symbol, e.g. NVDA.
rangestringYesDate range, e.g. 1y, 6m, ytd.
intervalstringNoBar interval: 1d (default), 1h, 15m, 5m, 1m.

Return value

FieldTypeDescription
symbolstringThe requested symbol.
rangestringThe requested range.
intervalstringThe bar interval.
pointsarrayArray of OHLCV bars (t, o, h, l, c, v).
quoteobjectThe most recent quote (price, change, change_pct, volume, as_of).
provenanceobjectProvider, fetched_at, content_hash, and source URL.

Example call

{
  "symbol": "NVDA",
  "range": "1y",
  "interval": "1d"
}

Example response

{
  "symbol": "NVDA",
  "range": "1y",
  "interval": "1d",
  "points": [
    { "t": "2024-01-16", "o": 545.15, "h": 552.50, "l": 540.80, "c": 548.90, "v": 41230000 },
    { "t": "2024-01-17", "o": 549.20, "h": 561.10, "l": 547.30, "c": 560.65, "v": 38900000 }
  ],
  "quote": {
    "price": 138.65,
    "change": 2.31,
    "change_pct": 1.69,
    "volume": 245000000,
    "as_of": "2025-01-15T21:00:00Z"
  },
  "provenance": {
    "provider": "polygon",
    "fetched_at": "2025-01-15T14:32:10.223Z",
    "content_hash": "sha256:9f2a1b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a",
    "source_url": "https://api.polygon.io/v2/aggs/ticker/NVDA/range/1/day/2024-01-15/2025-01-15"
  }
}
The content_hash in the provenance envelope lets you verify that two backtests ran against identical data. If the hash matches, the data is byte-identical.

search_skills

Progressive discovery — find skills matching a natural-language query. The agent should call this before calling any skill-backed tool directly. It returns a ranked list of matching skill IDs with one-line summaries.

Arguments

ArgumentTypeRequiredDescription
querystringYesNatural-language description of what you’re looking for, e.g. "congressional trading activity".
asset_classstringNoFilter by asset class: equity, crypto, fx, macro.
intentstringNoFilter by intent: research, screen, fetch, compute.

Return value

An array of skill summaries, ranked by relevance:
FieldTypeDescription
skill_idstringThe stable skill identifier, e.g. congress_trades.
versionstringLatest version of the skill.
summarystringOne-line description of what the skill does.
asset_classstringThe asset class the skill operates on.
intentstringThe skill’s intent category.
relevancefloatRelevance score from 0.0 to 1.0.

Example call

{
  "query": "congressional trading activity for NVDA",
  "asset_class": "equity",
  "intent": "fetch"
}

Example response

[
  {
    "skill_id": "congress_trades",
    "version": "2.1.0",
    "summary": "Pull congressional trading disclosures filtered by symbol or member.",
    "asset_class": "equity",
    "intent": "fetch",
    "relevance": 0.96
  },
  {
    "skill_id": "insider_transactions",
    "version": "1.4.2",
    "summary": "Pull Form 4 insider transactions (buys, sells, option exercises).",
    "asset_class": "equity",
    "intent": "fetch",
    "relevance": 0.71
  }
]

describe_skill

Fetch the full manifest for a skill. The agent calls this after search_skills to learn the exact input schema, output schema, cost, latency profile, and upstream provider before running the skill.

Arguments

ArgumentTypeRequiredDescription
skill_idstringYesThe skill identifier returned by search_skills.
versionstringNoA specific version. Defaults to latest.

Return value

FieldTypeDescription
skill_idstringThe skill identifier.
versionstringThe resolved version.
descriptionstringFull description of what the skill does.
input_schemaobjectJSON Schema for the skill’s input.
output_schemaobjectJSON Schema for the skill’s output.
providerstringUpstream data provider.
costobjectCost profile (per-call credits, cacheable).
latencyobjectLatency profile (p50, p99 in ms).

Example call

{
  "skill_id": "congress_trades",
  "version": "2.1.0"
}

Example response

{
  "skill_id": "congress_trades",
  "version": "2.1.0",
  "description": "Pull congressional trading disclosures filed under the STOCK Act. Filter by ticker symbol or member name. Returns transaction date, type, amount range, and filing date.",
  "input_schema": {
    "type": "object",
    "properties": {
      "symbol": { "type": "string", "description": "Ticker symbol to filter by." },
      "member": { "type": "string", "description": "Member name to filter by." },
      "since": { "type": "string", "format": "date", "description": "Only return filings after this date." }
    }
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "trades": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "member": { "type": "string" },
            "symbol": { "type": "string" },
            "transaction_date": { "type": "string", "format": "date" },
            "type": { "type": "string", "enum": ["buy", "sell"] },
            "amount_range": { "type": "string" },
            "filing_date": { "type": "string", "format": "date" }
          }
        }
      }
    }
  },
  "provider": "quiver_quant",
  "cost": { "per_call_credits": 1, "cacheable": true },
  "latency": { "p50_ms": 420, "p99_ms": 1800 }
}

The discovery loop

1

Search

Call search_skills with a natural-language query. Get back a ranked list of matching skill IDs.
2

Describe

Call describe_skill on the top match to read its input schema. Build the input dict.
3

Run

Call run_skill with the skill_id and input. Poll get_run or stream subscribe_run for the result. See Run management tools.
Cache describe_skill results within a session. Skill manifests are immutable per version, so re-fetching the same skill_id + version is wasted work.