# io.github.Kromatic-Innovation/fermi

> Calibrated probability distributions from natural-language questions via REST and MCP.

- name: io.github.Kromatic-Innovation/fermi
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 82/100
- quality: 67/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.Kromatic-Innovation%2Ffermi
- tools: https://api.protogrid.dev/v1/servers/io.github.Kromatic-Innovation%2Ffermi/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "fermi": {
      "type": "sse",
      "url": "https://fermi.krobar.ai/mcp/sse/"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 98
- freshness: 45
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-96% -stale-186d
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 67/100 (needs work)

### protocol: 50 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- warn `protocol.transport`: only the legacy HTTP+SSE transport, deprecated until 2027-07-28
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: estimate (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); feedback (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); buy_credits (readOnlyHint, destructiveHint, idempotentHint, openWorldHint)
- pass `tools.token_cost`: about 1,358 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 3 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 1,358 tokens to load them all
- tool set hash: 5f30e2c18da8b25bf8660bfc579363b7
- tools last changed: 2026-10-04T16:24:19.598Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.Kromatic-Innovation/fermi.svg)](https://protogrid.dev/servers/io.github.Kromatic-Innovation/fermi)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-04 `buy_credits` changed (description)
  - before: Purchase credits using a saved payment method (off-session). Requires a prior Stripe Checkout session to have saved a card. Credits are $0.50 each. Use GET /api/v1/billing/pricing to confirm the current price. Args: credits: Number of credits to purchase (minimum 1). api_key: Your Fermi API key from POST /api/v1/accounts. Required. Returns: Dict with credits_purchased, new_balance, and payment_status. Raises: ValueError: if authentication fails, no payment method is on file, or the card is declined.
  - after: Purchase credits using a saved payment method (off-session). Requires a prior Stripe Checkout session to have saved a card. Credits are $0.50 each. Use GET /api/v1/billing/pricing to confirm the current price. Args: credits: Number of credits to purchase (minimum 1). api_key: Your Fermi API key from POST /api/v1/accounts. Required. Returns: Dict with credits_purchased, new_balance, and payment_status. Raises: ToolError: if authentication fails, no payment method is on file, or the card is declined.
- 2026-10-04 `feedback` changed (description)
  - before: Submit feedback, a feature request, or a bug report to the Fermi team. An email is sent to the team and a copy is sent to the address you provide. Args: feedback_type: One of "feedback", "feature_request", or "bug". message: Your feedback or request (10-5000 characters). Be specific. sender_email: Your email address. A confirmation copy is sent here. sender_name: Your name (optional). api_key: Your Fermi API key (optional). If provided, your account ID is attached to the message for context. Returns: Confirmation with status "sent". Raises: ValueError: if validation fails or email delivery fails.
  - after: Submit feedback, a feature request, or a bug report to the Fermi team. An email is sent to the team and a copy is sent to the address you provide. Args: feedback_type: One of "feedback", "feature_request", or "bug". message: Your feedback or request (10-5000 characters). Be specific. sender_email: Your email address. A confirmation copy is sent here. sender_name: Your name (optional). api_key: Your Fermi API key (optional). If provided, your account ID is attached to the message for context. Returns: Confirmation with status "sent". Raises: ToolError: if validation fails or email delivery fails.
- 2026-10-04 `estimate` changed (description)
  - before: Return a calibrated probability distribution for a natural-language question. Args: question: The natural-language question (e.g. "What will the price of Bitcoin be in 6 months?"). unit: The unit the answer should be expressed in (e.g. "USD", "people", "meters"). target_horizon: When the estimate applies (e.g. "6 months", "2030", "current"). disclaimer_acknowledged: Must be true. Confirms you understand estimates are probabilistic decision-support only, not financial/medical/legal advice. requested_tier_id: Tier (1=fast sync, 2=grounded sync, 3=deep research async). Default 1. context: Optional extra context to condition the estimate. coverage_probability: Width of the confidence interval (0, 1). Default 0.9 (90% CI). source_inputs: Optional list of structured inputs (files, tables) for the model to consider. Each item needs source_type ("qualitative_text", "spreadsheet", or "structured_file") and either content (text) or structured_data (dict/list). callback_url: Optional webhook URL. When set, the completed or failed result is POSTed here with an HMAC signature, so you don't need to poll for async tiers. api_key: Your Fermi API key from POST /api/v1/accounts. Omit to use the anonymous tier. provider: Optional LLM provider selector ("openai" or "anthropic"). When omitted the server uses its configured default. Tier 1 supports both providers; tiers 2-3 currently accept "openai" only. model: Optional model id for the selected provider. Must match the model configured for (tier_id, provider); omit to accept the default. Returns: EstimateSuccessResponse as a dict: estimation_interval, distribution_family, distribution_parameters, point_estimate, reasoning_summary, assumptions, credits_charged, disclaimer, provider, and model. Raises: ValueError: if the estimate service rejects the request (bad tier, out of credits, unknown provider, missing disclaimer acknowledgement).
  - after: Return a calibrated probability distribution for a natural-language question. Args: question: The natural-language question (e.g. "What will the price of Bitcoin be in 6 months?"). unit: The unit the answer should be expressed in (e.g. "USD", "people", "meters"). target_horizon: When the estimate applies (e.g. "6 months", "2030", "current"). disclaimer_acknowledged: Must be true. Confirms you understand estimates are probabilistic decision-support only, not financial/medical/legal advice. requested_tier_id: Tier (1=fast sync, 2=grounded sync, 3=deep research async). Default 1. context: Optional extra context to condition the estimate. coverage_probability: Width of the confidence interval (0, 1). Default 0.9 (90% CI). source_inputs: Optional list of structured inputs (files, tables) for the model to consider. Each item needs source_type ("qualitative_text", "spreadsheet", or "structured_file") and either content (text) or structured_data (dict/list). callback_url: Optional webhook URL. When set, the completed or failed result is POSTed here with an HMAC signature, so you don't need to poll for async tiers. api_key: Your Fermi API key from POST /api/v1/accounts. Omit to use the anonymous tier. provider: Optional LLM provider selector ("openai" or "anthropic"). When omitted the server uses its configured default. Tier 1 supports both providers; tiers 2-3 currently accept "openai" only. model: Optional model id for the selected provider. Must match the model configured for (tier_id, provider); omit to accept the default. Returns: EstimateSuccessResponse as a dict: estimation_interval, distribution_family, distribution_parameters, point_estimate, reasoning_summary, assumptions, credits_charged, disclaimer, provider, and model. Raises: ToolError: if the estimate service rejects the request (bad tier, out of credits, unknown provider, missing disclaimer acknowledgement).

Full history: https://api.protogrid.dev/v1/servers/io.github.Kromatic-Innovation%2Ffermi/changes

## Remotes

- https://fermi.krobar.ai/mcp/sse/ (sse, auth none, reachable true, uptime30d 0.95652175)

## Packages

_none_

## Tools (3)

- `buy_credits`: Purchase credits using a saved payment method (off-session).

    Requires a prior Stripe Checkout session to have saved a card.
    Credits are $0.50 each. Use GET /api/v1/billing/pricing to confirm
    the current price.

    Args:
        credits: Number of credits to purchase (minimum 1).
        api_key: Your Fermi API key from POST /api/v1/accounts. Required.

    Returns:
        Dict with credits_purchased, new_balance, and payment_status.

    Raises:
        ToolError: if authentication fails, no payment method is on file,
            or the card is declined.
    
- `estimate`: Return a calibrated probability distribution for a natural-language question.

    Args:
        question: The natural-language question (e.g. "What will the price of
            Bitcoin be in 6 months?").
        unit: The unit the answer should be expressed in (e.g. "USD", "people",
            "meters").
        target_horizon: When the estimate applies (e.g. "6 months", "2030",
            "current").
        disclaimer_acknowledged: Must be true. Confirms you understand estimates
            are probabilistic decision-support only, not financial/medical/legal
            advice.
        requested_tier_id: Tier (1=fast sync, 2=grounded sync, 3=deep research
            async). Default 1.
        context: Optional extra context to condition the estimate.
        coverage_probability: Width of the confidence interval (0, 1). Default
            0.9 (90% CI).
        source_inputs: Optional list of structured inputs (files, tables) for
            the model to consider. Each item needs source_type
            ("qualitative_text", "spreadsheet", or "structured_file") and
            either content (text) or structured_data (dict/list).
        callback_url: Optional webhook URL. When set, the completed or failed
            result is POSTed here with an HMAC signature, so you don't need
            to poll for async tiers.
        api_key: Your Fermi API key from POST /api/v1/accounts. Omit to use the
            anonymous tier.
        provider: Optional LLM provider selector ("openai" or "anthropic").
            When omitted the server uses its configured default. Tier 1
            supports both providers; tiers 2-3 currently accept "openai" only.
        model: Optional model id for the selected provider. Must match the
            model configured for (tier_id, provider); omit to accept the
            default.

    Returns:
        EstimateSuccessResponse as a dict: estimation_interval, distribution_family,
        distribution_parameters, point_estimate, reasoning_summary, assumptions,
        credits_charged, disclaimer, provider, and model.

    Raises:
        ToolError: if the estimate service rejects the request (bad tier, out of
            credits, unknown provider, missing disclaimer acknowledgement).
    
- `feedback`: Submit feedback, a feature request, or a bug report to the Fermi team.

    An email is sent to the team and a copy is sent to the address you provide.

    Args:
        feedback_type: One of "feedback", "feature_request", or "bug".
        message: Your feedback or request (10-5000 characters). Be specific.
        sender_email: Your email address. A confirmation copy is sent here.
        sender_name: Your name (optional).
        api_key: Your Fermi API key (optional). If provided, your account ID
            is attached to the message for context.

    Returns:
        Confirmation with status "sent".

    Raises:
        ToolError: if validation fails or email delivery fails.
    
