fermi
Registry code: 314b166c15b3644c
Fermi answers forecasting questions with calibrated estimates. Call estimate_quantity_or_probability for either kind of question: how much / how many ("How many hotel rooms will Lisbon have in 2030?"), or will an event happen by a date ("Will any EU country make a four-day work week law before 2030?" -- set unit to "probability (0-1)"; point_estimate is the probability). Each answer is a range plus a probability distribution, with reasoning and assumptions. Tier 1 does not know today's date: put it, and any recent facts, in context.
Without an account you get 3 free tier-1 estimates per UTC…
- endpoint
- https://fermi.kromatic.com/mcp/sse
- protocol
- http-sse ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is fermi live?
- Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
- Is fermi free to use?
- Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
- What tools does fermi have?
- 6 tools: get_estimate_result, check_account_and_credits, buy_credits, estimate_quantity_or_probability, send_feedback, list_my_estimates.
- Is fermi safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.4%· all time 99.4%
last good check
of 6 tools
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- live → degraded· timeout after 20000ms
- topic
- data & analytics
- used for
- estimate a probability distribution for a question
- buy forecasting credits
- send feedback to the team
- takes → gives
- text → data
- tools
- 1 moves money
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
list_my_estimates auth-required 18h ago
Lists the past estimates on your account, newest first. Use this when the user wants to find an earlier estimate ("what did I estimate last week?") or has lost an estimate_id. Returns estimates, each with estimate_id, created_at, question, unit, target_horizon, point_estimate, estimation_interval, distribution_family and status; and next_offset, the offset of the next page, or null on the last page. For an estimate's full detail, pass its estimate_id to get_estimate_result. Estimates made without an account cannot be listed. 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: free, but account only: without an account the call is refused with a sign-in requirement.
{ "type": "object", "title": "list_my_estimatesArguments", "properties": { "limit": { "type": "integer", "title": "Limit", "default": 20, "description": "How many estimates to return, 1 to 100. Default 20." }, "offset": { "type": "integer", "title": "Offset", "default": 0, "description": "How many of the newest estimates to skip, for paging: pass the previous page's next_offset. Default 0." }, "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key", "default": null, "description": "Your Fermi API key. Required unless your connector is signed in. Get one with POST https://fermi.kromatic.com/api/v1/accounts." } } }arguments 31 linesget_estimate_result unknown 18h ago
Reads one estimate you already requested, by its estimate_id. Use this when a tier-3 (deep research) estimate came back with status "pending" and you want to know whether it is finished, or to show an earlier estimate again. Tier-3 results are only delivered this way (or to a callback_url, which chat clients usually cannot receive). Returns status: "pending" (with retry_after_seconds: how long to wait before asking again), "completed" (with the same fields a finished estimate returns), or "failed" (with error_detail; any credits taken are refunded). You can only read estimates made with the same credentials. Without an account you are recognised by IP address and browser or client, so a different network or client may not find the estimate. To find an id you lost, use list_my_estimates. Not for: making a new estimate. Cost: free. Reading a result never spends anything.
{ "type": "object", "title": "get_estimate_resultArguments", "required": [ "estimate_id" ], "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key", "default": null, "description": "The same api_key used when the estimate was requested (omit it if none was used, or if your connector is signed in). Estimates are visible only to the credentials that made them." }, "estimate_id": { "type": "string", "title": "Estimate Id", "description": "The estimate_id returned by estimate_quantity_or_probability or listed by list_my_estimates." } } }arguments 27 linescheck_account_and_credits unknown never probed
Reports who you are to Fermi and what you can spend: whether you are using Fermi without an account or with one, your credit balance or free estimates left today, and what each tier costs. Use this before a paid estimate to check the price or balance, after one to see what is left, or when the user asks about credits, free estimates or pricing. Returns billing (principal "anonymous" or "account", how you authenticated, credit_balance, anonymous_estimates_remaining_today and anonymous_quota_resets_at), tiers (credit_cost, delivery "sync" or "async" and whether it is available without an account, per tier), price_per_credit_usd, and recent_transactions (the account's last 10 credit movements; null without an account). Cost: free. Checking never spends credits and never uses up a free estimate.
{ "type": "object", "title": "check_account_and_creditsArguments", "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key", "default": null, "description": "Your Fermi API key. Omit it to ask about your connector's signed-in account, or about your free allowance without an account." } } }arguments 19 linesbuy_credits moves money unknown never probed
Buys Fermi credits by charging the card saved on your account, and returns the new balance. Use this when the user explicitly asks to buy or top up Fermi credits. Returns credits_purchased, new_balance and payment_status. If no card is saved yet, nothing is charged: it returns a checkout_url for the user to save a card in a browser, then call this again. Credits pay for estimates on an account (see estimate_quantity_or_probability for tier costs). To see the balance first, use check_account_and_credits. 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: real money -- charges the saved card $0.50 per credit. Needs an account.
{ "type": "object", "title": "buy_creditsArguments", "required": [ "credits" ], "properties": { "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key", "default": null, "description": "Your Fermi API key. Omit it if your connector is signed in with permission to buy credits." }, "credits": { "type": "integer", "title": "Credits", "description": "How many credits to buy, at least 1. Each is charged at the price in this tool's cost line." } } }arguments 27 linesestimate_quantity_or_probability unknown never probed
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 <date>?", "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.
{ "type": "object", "title": "estimate_quantity_or_probabilityArguments", "required": [ "question", "unit", "target_horizon", "disclaimer_acknowledged" ], "properties": { "unit": { "type": "string", "title": "Unit", "description": "Unit 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%)." }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Model", "default": null, "description": "Optional model id for that provider. It must be the model configured for that tier and provider, so normally omit it." }, "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key", "default": null, "description": "Your 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)." }, "context": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Context", "default": null, "description": "Anything 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." }, "provider": { "anyOf": [ { "enum": [ "openai", "anthropic" ], "type": "string" }, { "type": "null" } ], "title": "Provider", "default": null, "description": "Optional AI provider for the estimate, \"openai\" or \"anthropic\". Omit to use the default. Tiers 2 and 3 accept only \"openai\"." }, "question": { "type": "string", "title": "Question", "description": "The 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_url": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Callback Url", "default": null, "description": "Optional 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_inputs": { "anyOf": [ { "type": "array", "items": { "type": "object", "additionalProperties": true } }, { "type": "null" } ], "title": "Source Inputs", "default": null, "description": "Optional 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_horizon": { "type": "string", "title": "Target Horizon", "description": "When 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_id": { "type": "integer", "title": "Requested Tier Id", "default": 1, "description": "1 = 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_probability": { "type": "number", "title": "Coverage Probability", "default": 0.9, "description": "How 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_acknowledged": { "type": "boolean", "title": "Disclaimer Acknowledged", "description": "Must be true. Confirms the result is a probabilistic estimate for decision support, not financial, medical or legal advice. A call with false is refused." } } }arguments 130 linessend_feedback unknown never probed
Sends a short report about Fermi to the team that builds it. They read every report and use it to fix problems and decide what to build, so honest feedback, good or bad, is useful. Use this when: - a Fermi tool returned an error (send it right away), behaved unexpectedly or gave an estimate that looks wrong; - the user needs something no Fermi tool can do, or an option that is missing; - a description, output or error message was confusing; - a session in which you used Fermi is ending: send one short report even if everything worked. Knowing which tools did the job for which kind of question is useful data, not noise. Do not send one after a routine successful call mid-session. Put several points in one report. Only message is required. Fill in the other fields that apply so the team can act without guessing. Write in your own words. Never include personal data (names, email addresses, company names), the user's own numbers or private context, secrets or keys, or the conversation transcript; describe the question and any wrong result in general terms instead. Tell the user you are sending it. Add sender_email only if the user wants a reply; no copy is sent to it. If you are signed in, your account id is included. Returns status "sent". Cost: free. Works without an account.
{ "type": "object", "title": "send_feedbackArguments", "required": [ "message" ], "properties": { "impact": { "anyOf": [ { "enum": [ "blocked", "workaround", "minor", "none" ], "type": "string" }, { "type": "null" } ], "title": "Impact", "default": null, "description": "How much it cost the user. blocked: could not finish. workaround: finished another way. minor: an annoyance. none: no cost, for example praise." }, "api_key": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Api Key", "default": null, "description": "Optional Fermi API key. If given, the account id is attached so the team can look into it." }, "message": { "type": "string", "title": "Message", "description": "The report, in your own words, 10 to 5,000 characters. Say what you tried, what happened and what you expected. Leave out names, companies, the user's numbers or private context, and the conversation itself: write \"a market-size question\", not the question's details." }, "expected": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Expected", "default": null, "description": "What you expected to happen instead." }, "tool_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Tool Name", "default": null, "description": "The Fermi tool the report is about, for example estimate_quantity_or_probability." }, "user_goal": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "User Goal", "default": null, "description": "What the user was trying to do, as a general task in a few words, for example \"forecast a market size\". No names, company names or figures." }, "error_text": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error Text", "default": null, "description": "The error code and message the tool returned, if any. Remove any personal data or private context it quotes." }, "suggestion": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Suggestion", "default": null, "description": "What would have helped: a fix, a new feature or clearer wording." }, "estimate_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Estimate Id", "default": null, "description": "The estimate_id the report is about, if an estimate was involved." }, "sender_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Sender Name", "default": null, "description": "The user's name. Optional; only with sender_email." }, "sender_email": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Sender Email", "default": null, "description": "Optional. The user's email address, only if they want a reply and gave it to you. Do not invent one. No copy is sent to it." }, "feedback_type": { "enum": [ "bug", "unmet_use_case", "feature_request", "confusing", "wrong_result", "praise", "other" ], "type": "string", "title": "Feedback Type", "default": "other", "description": "What kind of report this is. bug: a tool errored or broke. wrong_result: it ran but the estimate looks wrong. unmet_use_case: the user needed something no tool does. feature_request: a missing option or parameter. confusing: a description, output or error was hard to understand. praise: something worked well. other: anything else (the default)." }, "what_happened": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "What Happened", "default": null, "description": "What actually happened, in general terms, without the user's numbers." } } }arguments 178 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id314b166c15b3644c.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/314b166c15b3644c/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/314b166c15b3644c?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.