# LLM Broker

> One key, every model: measured scores and live prices, routed per request to the cheapest fit.

- name: net.llm-broker/broker
- version: 1.3.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 92/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/net.llm-broker%2Fbroker
- tools: https://api.protogrid.dev/v1/servers/net.llm-broker%2Fbroker/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "broker": {
      "type": "http",
      "url": "https://api.llm-broker.net/api/v1/broker/mcp",
      "headers": {
        "Authorization": "Bearer ${BROKER_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${BROKER_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-14d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 92/100 (strong)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 300000)

### 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: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 8 tools declare all four hints; missing: list_models (destructiveHint, idempotentHint); recommend_model (destructiveHint, idempotentHint); chat (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 1,194 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 7 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: 8, about 1,194 tokens to load them all
- tool set hash: 140c1b1b6b955d16a24fc47e9176fcb2
- tools last changed: 2026-10-05T21:05:50.658Z
- badge: [![protogrid quality](https://protogrid.dev/badge/net.llm-broker/broker.svg)](https://protogrid.dev/servers/net.llm-broker/broker)
- 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-05 `report_outcome` added
  - Tell the broker if the answer to a request worked for your task — request_id comes from broker.receipt of every chat answer. Outcomes appear per model in list_models as reported (failures_30d / outcomes_30d), so the scores are checked against real tasks. No refund, no price change.
- 2026-10-05 `create_account` added
  - Creates a card checkout (Stripe) for a new broker account — same as POST /api/v1/broker/accounts. Give checkout_url to your human; after payment the API key is shown exactly once at status_url (GET, poll until 200). topup: amount 10/25/50, monthly: limit 50/100/250 (USD/EUR/CHF; other currencies: GET /api/v1/broker/currencies). Omit category and level to choose per request.
- 2026-10-03 `get_balance` added
  - Balance, credit limit and spend this month (CHF, the book currency), billing mode and payment currency of the account behind Authorization: Bearer ast_sk_….
- 2026-10-03 `estimate_cost` added
  - Cost estimate at list price for a model and token counts, in your currency. The bill follows the offer the router actually picks (broker.cost in the chat result).
- 2026-10-03 `recommend_model` added
  - Picks from the published catalog (our own benchmark scores, list prices): best = highest score in the category, best_value = score per output price, plus alternatives. Only measured models are recommended. Returns chat_arguments for that model and a routing object to let the broker pick per request.
- 2026-10-03 `get_model` added
  - One model from list_models by id: measured scores per category, price per 1M tokens (default USD), regions, context and capabilities.
- 2026-10-02 `list_models` changed (description, inputSchema)
  - before: Models on the broker with benchmark scores per category (0–1, measured by us), price per 1M tokens in CHF and regions. Filter by category, region and price; sorted by score in the category, else by price.
  - after: Models on the broker with benchmark scores per category (0–1, measured by us), price per 1M tokens (default USD, any currency from GET /api/v1/broker/currencies) and regions. Filter by category, region and price; sorted by score in the category, else by price.

Full history: https://api.protogrid.dev/v1/servers/net.llm-broker%2Fbroker/changes

## Remotes

- https://api.llm-broker.net/api/v1/broker/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (8)

- `chat`: Sends messages to the broker (OpenAI chat completions). model defaults to `taylor` (strongest measured model); any id from list_models works. routing sets criteria per request, e.g. {"category": "coding", "level": "best"}. Needs Authorization: Bearer ast_sk_… — billed like the REST API.
- `create_account`: Creates a card checkout (Stripe) for a new broker account — same as POST /api/v1/broker/accounts. Give checkout_url to your human; after payment the API key is shown exactly once at status_url (GET, poll until 200). topup: amount 10/25/50, monthly: limit 50/100/250 (USD/EUR/CHF; other currencies: GET /api/v1/broker/currencies). Omit category and level to choose per request.
- `estimate_cost`: Cost estimate at list price for a model and token counts, in your currency. The bill follows the offer the router actually picks (broker.cost in the chat result).
- `get_balance`: Balance, credit limit and spend this month (CHF, the book currency), billing mode and payment currency of the account behind Authorization: Bearer ast_sk_….
- `get_model`: One model from list_models by id: measured scores per category, price per 1M tokens (default USD), regions, context and capabilities.
- `list_models`: Models on the broker with benchmark scores per category (0–1, measured by us), price per 1M tokens (default USD, any currency from GET /api/v1/broker/currencies) and regions. Filter by category, region and price; sorted by score in the category, else by price.
- `recommend_model`: Picks from the published catalog (our own benchmark scores, list prices): best = highest score in the category, best_value = score per output price, plus alternatives. Only measured models are recommended. Returns chat_arguments for that model and a routing object to let the broker pick per request.
- `report_outcome`: Tell the broker if the answer to a request worked for your task — request_id comes from broker.receipt of every chat answer. Outcomes appear per model in list_models as reported (failures_30d / outcomes_30d), so the scores are checked against real tasks. No refund, no price change.
