Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Smart Money Flow (composite)

get_smart_money_flow
Read-onlyIdempotent

Composite flow score on [-100, +100] aggregating insider transactions, 13F institutional Δ-shares vs the prior quarter, and SC 13D/13G blockholder changes over a lookback window. Each component normalised independently, then combined with configurable weights (default: institutional 0.4, blockholder 0.4, insider 0.2). Returns per-component attribution so an agent can see WHY the score is what it is — not just the headline number. NOTE: the institutional component is a QoQ share-change signal computed over the top-5 13F filers on a MATCHED current-vs-prior basis (a filer only counts when its prior-quarter book is observable), NOT the issuer's complete institutional book — treat the score as a directional signal, not an exact flow. coverage.coverage_confidence (0–1) reports how much of that basis had a real prior quarter; when it is 0 the institutional component is forced to 0 so a 13F ingestion gap can never surface as a false max-conviction buy. See the coverage block for holder coverage + staleness. The score is a unitless composite, not a dollar figure. Institutional tier only.

Input Schema

NameRequiredDescriptionDefault
tickerYesIssuer ticker symbol — or a CIK (SEC identifier).
as_of_dateNoPoint-in-time cutoff (YYYY-MM-DD) applied to all three legs (institutional, insider, blockholder) via SEC accepted_at — filings accepted after this date are excluded so the composite is computed with zero look-ahead. Omit for the latest knowable signal.
lookback_daysNoLookback window for insider + blockholder components. Default 90.
weight_insiderNoWeight applied to the insider component (0–1).
weight_blockholderNoWeight applied to the blockholder component (0–1).
weight_institutionalNoWeight applied to the institutional component (0–1).

Output Schema

NameRequiredDescriptionDefault
cikYes
_metaYesProvenance envelope — data lineage for every MCP response
tickerYes
weightsYes
coverageYesHonesty block: the institutional signal is computed from a top-N 13F slice with a top-5-filer matched basis. Surfaces holder coverage + staleness so the composite is never read as the issuer's complete book.
as_of_dateYesThe point-in-time cutoff actually applied (echo of the as_of_date input). Null when no PIT cut was requested — never the reporting period_end fabricated as a cutoff.
componentsYes
period_endYesThe institutional 13F REPORTING period — NOT a point-in-time cutoff.
company_nameYes
composite_scoreYes
metrics_displayNoThe scores, insider dollar flows and institutional share counts rendered for prose, keyed by field path ('composite_score', 'components.insider.sell_usd', 'components.institutional.net_change_shares'). QUOTE THESE VERBATIM.
insider_componentYes
blockholder_componentYes
institutional_componentYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / metrics_display
      Added value: +{
      +  "additionalProperties": {
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "description": "The scores, insider dollar flows and institutional share counts rendered for prose, keyed by field path ('composite_score', 'components.insider.sell_usd', 'components.institutional.net_change_shares'). QUOTE THESE VERBATIM.",
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."New value: +"payg_charge = real pay-per-call charge (a card or MPP payment through agent-pay). payg_rate_card = indicative price, not billed."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed."New value: +"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / billed / description
      Previous value: -"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free."New value: +"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value only: no charge was made for this call (it was within your plan)."
  4. Added
  5. Removed
  6. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / fundamentals_as_of / description
      Previous value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to."New value: +"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."
  7. Changed2 schema fields changed
    • changedInput schema / properties / ticker / description
      Previous value: -"Issuer ticker symbol."New value: +"Issuer ticker symbol — or a CIK (SEC identifier)."
    • changedInput schema / properties / ticker / pattern
      Previous value: -"^[A-Za-z.\\-]+$"New value: +"^[A-Za-z0-9.\\-]+$"
  8. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / fundamentals_as_of
      Added value: +{
      +  "description": "ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / price_as_of
      Added value: +{
      +  "description": "ISO timestamp when the price surfaces were last refreshed.",
      +  "type": "string"
      +}
  9. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / cost_usd
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.",
      +  "properties": {
      +    "amount_usd": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "basis": {
      +      "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.",
      +      "enum": [
      +        "payg_charge",
      +        "payg_rate_card"
      +      ],
      +      "type": "string"
      +    },
      +    "billed": {
      +      "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "amount_usd",
      +    "billed",
      +    "basis"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / _meta / properties / latency_ms
      Added value: +{
      +  "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  10. Changed1 schema field changed
    • addedOutput schema / properties / _meta / properties / pit_safe / description
      Added value: +"true iff a zero-look-ahead point-in-time cut was applied to every returned figure"
  11. Changed3 schema fields changed
    • addedOutput schema / properties / coverage / properties / component_basis_filers_matched
      Added value: +{
      +  "description": "Count of top-5 filers that had an observable prior-quarter book.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / coverage / properties / coverage_confidence
      Added value: +{
      +  "description": "Fraction of the top-5 basis with an OBSERVABLE prior-quarter book (matched filers / 5). 0 → institutional_component is forced to 0 (no honest QoQ basis), so a 13F ingestion gap can never masquerade as a saturated buy signal.",
      +  "maximum": 1,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedOutput schema / properties / coverage / required
      Previous value: -[
      -  "institutional_holders_covered",
      -  "institutional_topn_cap",
      -  "institutional_is_partial",
      -  "institutional_component_basis",
      -  "data_age_days",
      -  "staleness_warning",
      -  "note"
      -]New value: +[
      +  "institutional_holders_covered",
      +  "institutional_topn_cap",
      +  "institutional_is_partial",
      +  "institutional_component_basis",
      +  "coverage_confidence",
      +  "component_basis_filers_matched",
      +  "data_age_days",
      +  "staleness_warning",
      +  "note"
      +]
  12. Changed12 schema fields changed
    • addedInput schema / properties / as_of_date
      Added value: +{
      +  "description": "Point-in-time cutoff (YYYY-MM-DD) applied to all three legs (institutional, insider, blockholder) via SEC accepted_at — filings accepted after this date are excluded so the composite is computed with zero look-ahead. Omit for the latest knowable signal.",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / as_of_date
      Added value: +{
      +  "description": "The point-in-time cutoff actually applied (echo of the as_of_date input). Null when no PIT cut was requested — never the reporting period_end fabricated as a cutoff.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / components / properties / institutional / properties / component_basis_current_shares
      Added value: +{
      +  "description": "Current shares of the top-5 filers — the basis used for the component.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / components / properties / institutional / properties / component_basis_prior_shares
      Added value: +{
      +  "description": "Prior-quarter shares of the SAME top-5 filers (matched basis).",
      +  "type": "number"
      +}
    • addedOutput schema / properties / components / properties / institutional / properties / covered_book_shares
      Added value: +{
      +  "description": "Sum of shares across all covered (top-N) 13F holders — informative.",
      +  "type": "number"
      +}
    • removedOutput schema / properties / components / properties / institutional / properties / current_total_shares
      Removed value: -{
      -  "type": "number"
      -}
    • addedOutput schema / properties / components / properties / institutional / properties / net_change_shares / description
      Added value: +"Top-5 matched-basis QoQ share change."
    • removedOutput schema / properties / components / properties / institutional / properties / prior_total_shares
      Removed value: -{
      -  "type": "number"
      -}
    • changedOutput schema / properties / components / properties / institutional / required
      Previous value: -[
      -  "current_total_shares",
      -  "prior_total_shares",
      -  "net_change_shares"
      -]New value: +[
      +  "covered_book_shares",
      +  "component_basis_current_shares",
      +  "component_basis_prior_shares",
      +  "net_change_shares"
      +]
    • addedOutput schema / properties / coverage
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Honesty block: the institutional signal is computed from a top-N 13F slice with a top-5-filer matched basis. Surfaces holder coverage + staleness so the composite is never read as the issuer's complete book.",
      +  "properties": {
      +    "data_age_days": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "institutional_component_basis": {
      +      "type": "string"
      +    },
      +    "institutional_holders_covered": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "institutional_is_partial": {
      +      "description": "True when the top-N cap was hit — the 13F book is only partially covered.",
      +      "type": "boolean"
      +    },
      +    "institutional_topn_cap": {
      +      "type": "integer"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "staleness_warning": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "institutional_holders_covered",
      +    "institutional_topn_cap",
      +    "institutional_is_partial",
      +    "institutional_component_basis",
      +    "data_age_days",
      +    "staleness_warning",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / period_end / description
      Added value: +"The institutional 13F REPORTING period — NOT a point-in-time cutoff."
    • changedOutput schema / required
      Previous value: -[
      -  "_meta",
      -  "ticker",
      -  "cik",
      -  "company_name",
      -  "period_end",
      -  "composite_score",
      -  "insider_component",
      -  "institutional_component",
      -  "blockholder_component",
      -  "weights",
      -  "components"
      -]New value: +[
      +  "_meta",
      +  "ticker",
      +  "cik",
      +  "company_name",
      +  "period_end",
      +  "as_of_date",
      +  "composite_score",
      +  "insider_component",
      +  "institutional_component",
      +  "blockholder_component",
      +  "weights",
      +  "components",
      +  "coverage"
      +]
  13. Added

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Well beyond the readOnly/idempotent annotations, it discloses the exact aggregation method, per-component attribution in the response, the coverage_confidence guard that forces the institutional leg to 0 on an ingestion gap, and the explicit warning that the score is unitless and institutional-tier-only. These are precisely the failure modes an agent would otherwise misread as conviction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the definition and score range before the caveats, and the NOTE about matched-basis 13F coverage genuinely earns its length because it prevents a false max-conviction read. It is still dense and slightly repetitive (the institutional-tier caveat is restated across sentences), so not a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the description still signposts the relevant return fields (per-component attribution, coverage block, coverage_confidence) without redundantly re-specifying the shape. For a composite scoring tool with six parameters, nothing needed to call or interpret it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented in structured form; the description mostly restates the default weights and the lookback/tiering semantics the schema already carries. It does add a little conceptual meaning — that components are normalised independently before weighting — but not enough to move past the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (composite flow score on [-100,+100]) and enumerates exactly which three signal legs it aggregates, plus how they combine. That clearly separates it from the sibling leg-level tools (get_insider_sentiment, get_institutional_holdings, get_blockholders), which return one component each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It sets clear usage context — 'treat the score as a directional signal, not an exact flow' — and explains the degenerate case where coverage is 0. What's missing is explicit routing guidance naming the alternative tools (e.g. use get_top_holders when you need the full institutional book rather than this top-5 matched-basis signal).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.