Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Score Due Theses (bulk auto-grader)

score_due_theses

Find every thesis past its horizon with no outcome yet, and grade each via score_thesis_outcome. Operates on the caller's OWN theses — omit customer_id. Targeting another user's customer_id is reserved for Valuein's internal scoring service and is rejected for every plan, including Institutional. Returns a summary + per-thesis results. Idempotent — a re-call only re-grades anything not already graded.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
maxNoSoft cap on theses scored per call. Defaults to 100. The frontend cron walks users serially so a low cap per user keeps each MCP request bounded.
as_ofNoSnapshot date for the 'current' fundamentals window. Defaults to today UTC.
customer_idNoStripe customer_id of the target user. Defaults to the caller's own — leave it unset. Supplying a DIFFERENT customer_id is restricted to Valuein's internal scoring service and is rejected on every plan, Institutional included.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dueYesSubset that were past their horizon AND ungraded.
_metaYesProvenance envelope — data lineage for every MCP response
errorsYesPer-thesis errors caught + logged.
scoredYesSuccessfully scored + persisted.
resultsYes
scannedYesTotal active theses inspected.
skippedYesSkipped because already graded or not yet due.
target_customer_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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."
  2. Changed1 schema field changed
    • changedInput schema / properties / customer_id / description
      Previous value: -"Stripe customer_id of the target user. Defaults to the caller's own; required to be the caller's own unless the caller's plan is `full` (admin / internal cron)."New value: +"Stripe customer_id of the target user. Defaults to the caller's own — leave it unset. Supplying a DIFFERENT customer_id is restricted to Valuein's internal scoring service and is rejected on every plan, Institutional included."
  3. 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"
      +}
  4. 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"
      +}
  5. 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"
  6. Added

TDQS

A3.6/5.0
Behavior1/5

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

The description adds real behavioral context beyond the annotations — caller scope, the hard rejection of non-owner customer_ids across all plans, the summary + per-thesis return shape, and retry behavior. However, it explicitly claims 'Idempotent — a re-call only re-grades anything not already graded' while the annotations state idempotentHint: false, a direct conflict on a core behavioral trait. Per the contradiction rule, this dimension scores 1.

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

Conciseness5/5

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

Four front-loaded sentences, each with a distinct job: purpose, caller scope, permission exclusion, and return/retry behavior. Nothing is wasted, and the most decision-critical fact (caller's own theses, reject others) appears early.

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

Completeness4/5

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

For a moderately complex bulk-action tool, the description covers what an agent needs: target population, the permission restriction that could otherwise cause rejected calls, and the return shape. A full output schema exists so return details need no elaboration. It is docked a point because the idempotency contradiction leaves genuine ambiguity about retry semantics — the one place an agent needs certainty.

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 description coverage is 100%, with all three parameters already documented including defaults and the customer_id restriction, so the baseline is 3. The description reinforces 'omit customer_id' and adds the frontend-cron rationale for the max cap, but these are marginal additions over what the schema already states.

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?

Opens with a specific verb and resource: 'Find every thesis past its horizon with no outcome yet, and grade each via score_thesis_outcome.' It distinguishes itself from the closest siblings by naming score_thesis_outcome as the per-thesis grader it wraps (bulk vs. single), and the title 'bulk auto-grader' separates it from score_due_claims by resource type. An agent can tell exactly what this tool does without opening the schema.

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?

The description gives explicit when/when-not guidance: 'Operates on the caller's OWN theses — omit customer_id' states when to use it, and 'Targeting another user's customer_id is reserved for Valuein's internal scoring service and is rejected for every plan' is a hard exclusion. It names the underlying singular tool (score_thesis_outcome), which implies the alternative for single-thesis grading, though it never explicitly says 'use score_thesis_outcome for one thesis' or contrasts with score_due_claims, so it stops just short of a 5.

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.