Skip to main content
Glama

Estimate a number, or the probability an event happens by a date

estimate_quantity_or_probability

Estimates an uncertain number, or the probability that an event happens by a date, from a question in plain language, and returns a calibrated range and probability distribution. Use this when the user asks how much, how many, how big or how long something is or will be (market size, cost, count, price, duration), or asks a yes/no question about the future: "will X happen by ?", "what are the odds / chances / likelihood of X?".

For a yes/no question, set unit to "probability (0-1)": point_estimate is then Fermi's best probability that the event happens (0.15 means 15%), and estimation_interval is how far that probability could plausibly be off (e.g. 0.05 to 0.35); the beta distribution describes the same uncertainty. There is no separate yes/no verdict.

Returns point_estimate, estimation_interval (low/high: the range that should contain the true value, or for a yes/no question the true probability, with probability coverage_probability, default 90%), the fitted distribution (distribution_family and distribution_parameters), reasoning_summary, assumptions, estimate_id, and next_steps.simulate. To combine several estimates into a model with a time axis and get percentiles, NPV or payback out, feed them into neumann (https://neumann.kromatic.com) as simulation root nodes -- every successful estimate carries a next_steps.simulate block with the arguments already prepared. (neumann is Kromatic's companion Monte Carlo simulation server; fermi itself does not simulate.) The neumann URLs above are production. A non-production fermi still emits next_steps.simulate against its own configured neumann base URL, so read that block rather than these links whenever you are not on the production host.

Tiers: 1 = fast, answers in the same call, no web search, and the only tier available without an account. 2 = grounded, answers in the same call, searches the web. 3 = deep research, runs in the background: the call returns status "pending" and an estimate_id; read the result later with get_estimate_result. Tier 1 does not know today's date or recent news: for any question about the future, put today's date and relevant recent facts in context, and give an absolute date in target_horizon.

Not for: running a simulation or combining estimates (use neumann); reading prediction-market prices or placing bets; financial, medical or legal advice. To get an account, call POST https://fermi.kromatic.com/api/v1/accounts (it returns an api_key once; a new account starts with 3 credits), or sign in through your connector. If you cannot make HTTP requests, ask the user to do one of these.

Cost: without an account, 3 free tier-1 estimates per UTC day; once they are used up, calls are refused with a sign-in requirement until 00:00 UTC. With an account, tier 1/2/3 costs 1/3/10 credits ($0.50/$1.50/$5.00 at $0.50 per credit). Tiers 1 and 2 charge only if the estimate succeeds, and a failed call does not use up a free estimate; tier 3 charges when it starts and refunds if it fails. Every call is a new estimate and is charged again, even for the same question. credits_charged and billing in the result report what was spent.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "question": "<question>",
      "unit": "<unit>",
      "target_horizon": "<target_horizon>",
      "disclaimer_acknowledged": "<disclaimer_acknowledged>"
    },
    "name": "estimate_quantity_or_probability"
  }
}

Input Schema

NameRequiredDescriptionDefault
unitYesUnit of the answer, e.g. "USD", "people", "hotel rooms", "days". For a yes/no event question use "probability (0-1)": the answer is then a probability between 0 and 1 (0.15 = 15%).
modelNoOptional model id for that provider. It must be the model configured for that tier and provider, so normally omit it.
api_keyNoYour Fermi API key. Omit it if your connector is already signed in, or to use Fermi without an account. Get one with POST https://fermi.kromatic.com/api/v1/accounts (returned once).
contextNoAnything the estimate should take into account. For a question about the future always include today's date ("Today is 2026-10-30."), plus recent facts or news, and the user's own numbers or definitions.
providerNoOptional AI provider for the estimate, "openai" or "anthropic". Omit to use the default. Tiers 2 and 3 accept only "openai".
questionYesThe question in plain language, one quantity or one event per call. Quantity: "How many hotel rooms will Lisbon have in 2030?". Yes/no event: "Will any EU country make a four-day work week law before 2030-01-01?".
callback_urlNoOptional URL that receives the finished or failed result as a signed POST, so a server need not keep asking. Chat clients usually cannot receive it: read the result with get_estimate_result instead.
source_inputsNoOptional documents or data for the estimate to use. Each item has source_type ("qualitative_text", "spreadsheet" or "structured_file") and either content (text) or structured_data (an object, or a list of row objects); title, file_name and media_type are optional.
target_horizonYesWhen the answer applies. Prefer an absolute date or year: "by 2027-06-30", "2030", "end of 2028", or "current" for a value today. Turn relative phrases like "in the next 12 months" into a date, because tier 1 does not know today's date.
requested_tier_idNo1 = fast: answers in the same call, no web search; the only tier without an account. 2 = grounded: answers in the same call, searches the web; account only. 3 = deep research: runs in the background and searches the web; returns status "pending" and an estimate_id to read later with get_estimate_result; account only. Default 1. Without an account, tiers 2 and 3 are refused with a sign-in requirement; nothing is downgraded or charged.
coverage_probabilityNoHow likely the returned interval is to contain the true value, strictly between 0 and 1. Default 0.9, a 90% interval. Use 0.95 for a "95% interval", 0.8 for an "80% range".
disclaimer_acknowledgedYesMust be true. Confirms the result is a probabilistic estimate for decision support, not financial, medical or legal advice. A call with false is refused.

Output Schema

NameRequiredDescriptionDefault
modelNoModel that produced it.
statusNoOnly on results that are not finished yet or that come from get_estimate_result: "pending" (tier 3 still running), "completed" or "failed".
billingNoWho this call was billed to and what is left. Present on every Fermi result.
tier_idNoThe tier that produced it (1, 2 or 3).
providerNoAI provider that produced it.
range_lowNoSame as estimation_interval.low.
created_atNoWhen it was made (ISO 8601).
disclaimerNoNot financial advice notice.
next_stepsNoReady-made input for neumann, Kromatic's Monte Carlo simulation server. simulate.root_node (distribution_type and distribution_params) can be added to a neumann model as one uncertain input; when the family has no direct neumann match, simulate.solve_args are the arguments for neumann's convert_range_to_distribution instead. simulate.note says which, and simulate.mcp_url is the neumann server to call.
range_highNoSame as estimation_interval.high.
request_idNoId of this request, for support.
assumptionsNoThe assumptions the estimate rests on.
estimate_idNoId of this estimate, for get_estimate_result and list_my_estimates.
error_detailNoWhen failed: what went wrong.
point_estimateNoThe single best value. For a yes/no question asked with unit "probability (0-1)", this is the probability that the event happens (0.15 = 15%).
credits_chargedNoCredits this estimate cost (0 without an account).
confidence_levelNoSet only from coverage_probability: "high" for 0.95 or more, "medium" for 0.9 up to 0.95, "low" below 0.9. It is not a judgement of the estimate's quality.
credits_refundedNoWhen failed: credits given back.
research_sourcesNoTiers 2 and 3: web sources used (url, title, snippet, relevance_note).
reasoning_summaryNoHow the estimate was reached, in a few sentences.
verification_flagsNoTier 3: issues the second check raised.
distribution_familyNoShape of the fitted probability distribution: normal, log_normal (positive and right-skewed), uniform, constant, beta (values between 0 and 1, used for probabilities and rates), triangle, gamma, exponential or poisson (counts).
estimation_intervalNoThe range that should contain the true value with probability coverage_probability. For a probability question, both ends are probabilities between 0 and 1.
retry_after_secondsNoWhen pending: seconds to wait before reading it again.
coverage_probabilityNoChance the interval contains the true value (0.9 = 90%).
verification_summaryNoTier 3: what a second check found.
distribution_parametersNoParameters of that distribution by name, e.g. alpha and beta for beta, mu and sigma for log_normal.
decomposition_suggestionsNoSub-questions (sub_question, reasoning) worth estimating separately to sharpen this one. Each would be a new estimate call at the usual cost.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior4/5

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

Well beyond the annotations, it discloses credit costs per tier, the 3-per-UTC-day anonymous quota and 00:00 UTC reset, charge-on-success vs charge-on-start-and-refund semantics, and the critical non-idempotency warning ("Every call is a new estimate and is charged again, even for the same question") — which is exactly the context the annotations cannot convey. Tier 3's asynchronous pending/estimate_id behavior is also stated. It loses a point only because the long neumann/production-URL aside is somewhat convoluted.

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

Conciseness3/5

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

Well front-loaded: capability, then when-to-use, then the yes/no interpretation, then returns, then constraints and cost. But it is long enough to sprawl, and the tier definitions in the prose duplicate requested_tier_id's schema description almost verbatim, while the neumann production-vs-non-production URL caveat adds several lines of low-frequency value.

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?

For a paid, open-world, non-idempotent, sometimes-asynchronous estimation call with 12 parameters, the description covers everything an agent needs to invoke it correctly: cost and quota, auth paths, tier escalation and refusal behavior, async polling via get_estimate_result, and the downstream simulate handoff. An output schema exists, yet the description's explanation of the interval/coverage semantics still adds real value for the probability mode.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds genuine interpretive meaning, notably how to read point_estimate and estimation_interval when unit is "probability (0-1)" (0.15 = 15%) and that there is no separate yes/no verdict. It also reinforces that target_horizon should be converted to an absolute date because tier 1 lacks today's date, tying the parameter to a failure mode rather than restating the schema.

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?

The first sentence names the specific verb and the two distinct resources (an uncertain number, or the probability that an event happens by a date), which maps exactly to the tool's two modes. It is clearly distinguishable from siblings like get_estimate_result (retrieves) and buy_credits (billing), and it names neumann as the simulation counterpart it is not.

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

Usage Guidelines5/5

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

Explicit when-to-use is given with concrete trigger phrasings ("how much, how many, how big, how long", "will X happen by <date>") and when-not-to-use is enumerated (simulation, prediction-market prices, advice). It also routes to siblings and external tools: get_estimate_result for tier 3 pending results, neumann for combining estimates into a model, and the account endpoint when unauthenticated.

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.

Resources