# Nutrients: proof-backed nutrition data

> Proof-backed nutrition for foods, chain menus, barcodes, supplements. Agents add what's missing.

- name: io.prospre/nutrients
- version: 0.2.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 85/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.prospre%2Fnutrients
- tools: https://api.protogrid.dev/v1/servers/io.prospre%2Fnutrients/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "nutrients": {
      "type": "http",
      "url": "https://nutrition.prospre.io/mcp",
      "headers": {
        "Authorization": "Bearer ${api_key}"
      }
    }
  }
}
```

Placeholders to fill: `${api_key}`.

## Trust

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

## Quality 85/100 (new)

### protocol: 75 (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
- pass `protocol.transport`: streamable HTTP
- 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: 94 (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`: 29 of 29 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 29 tools declare all four hints; missing: query (destructiveHint, idempotentHint); check_intake (destructiveHint, idempotentHint); submit_reading (idempotentHint); …
- pass `tools.token_cost`: about 3,877 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

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

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 6 of the 7 days needed

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

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

- tools: 29, about 3,877 tokens to load them all
- tool set hash: 67595060431fb6691495f05e7e7a2b2a
- tools last changed: 2026-11-12T00:53:39.253Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.prospre/nutrients.svg)](https://protogrid.dev/servers/io.prospre/nutrients)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-12 `register` changed (description, inputSchema, annotations) **meaning changed**
  - before: Create an API key. It works immediately for reads and bounded add_proof and flag contributions (feedback is free), with a small daily quota. Optionally pass your operator's email (or call link_email later): a 6-digit code is emailed, and confirming it with verify raises the quota and removes the no-email contribution caps. One verified email owns all its keys. Use this only if you have no key yet; the key works at once.
  - after: Create an API key, usable at once. Call it only if you have no key yet.
- 2026-11-12 `usage` changed (description, inputSchema, annotations) **meaning changed**
  - before: Your key's plan, balances, limits and operation costs, plus separate contribution and rolling 24-hour entity creation allowances (limit, used, remaining and reset). Free.
  - after: Your plan, balances, limits and contribution allowances. Free.
- 2026-11-12 `verify` changed (description, inputSchema, annotations) **meaning changed**
  - before: Confirm the 6-digit code emailed by register or link_email, with the key that asked for it: links the email, moves the key to the free plan and adds the contribute scope, removing the no-email contribution caps. Five wrong codes end every code sent to this key; then call link_email again.
  - after: Confirm the 6-digit code emailed by register or link_email.
- 2026-11-12 `link_email` changed (description, inputSchema, annotations) **meaning changed**
  - before: Link your operator's email to this key to raise its limits and keep contributing after the no-email lifetime cap (flag and add_proof work before verification; feedback is never capped by it). A 6-digit code is emailed to the address; confirm it with verify. Your key keeps working meanwhile. Free.
  - after: Link your operator's email to raise limits; confirm the emailed code with verify. Free.
- 2026-11-12 `changes` changed (description, inputSchema, annotations) **meaning changed**
  - before: Entities changed after a sequence number (paid plans). Rebuild batches report each changed entity; rebuild_complete marks a maintenance boundary and tells consumers to refresh derived search indexes. Its entity_id is one affected entity, not the complete affected set.
  - after: Entities changed after a sequence number (paid plans).
- 2026-11-12 `feedback` changed (description, inputSchema, annotations) **meaning changed**
  - before: Tell us what would make this service better for you: a tool that confused you, a missing operation or field, a slow call, a wrong result, an unclear doc or skill, or what worked well. Free. Wrong nutrition values go to flag instead, so they can be fixed at the source. Feedback is read by people and summarised for the roadmap.
  - after: Tell us what confused you, was slow or missing, or worked well. Free. Wrong values go to flag.
- 2026-11-12 `feedback_status` changed (description, inputSchema, annotations) **meaning changed**
  - before: Read progress of your own feedback, free: status, canonical issue or duplicate, fix PR and regression test, or decline reason. No other reporter text or identity is exposed.
  - after: Progress of your own feedback. Free.
- 2026-11-12 `suggest_domain` changed (description, inputSchema, annotations) **meaning changed**
  - before: Suggest a website as a trusted source: a government food database, or the official site of one brand or restaurant chain. A link on a trusted domain counts as that owner's own data (the brand's site is rank 1 for its items); a link anywhere else is an unknown website at rank 4. A person checks and approves every domain; this never approves one. Free, capped per day.
  - after: Suggest an official brand, chain or government site as a trusted source. Free.
- 2026-11-12 `research` changed (description, inputSchema, annotations) **meaning changed**
  - before: One task that improves the database, with everything needed to finish it in one call: the gap or the item, what proof counts, the add_proof call prefilled, and what it earns. Free. A fill task is something two or more agents asked for and did not get; a complete task is an item served with calories but no protein, fat or carbohydrate; a verify task asks for your own proof of an item another agent read. Do a task with the best proof (the brand's or restaurant's own page, a regulator's record, a label photo); never guess a value. Call it again after each task, with skip listing what you could not do; stop when it returns no task. The same loop is the MCP prompt "research" and the CLI command "nutrients research".
  - after: One improvement task with its add_proof call prefilled. Repeat, skipping what you could not do, until no task. Free.
- 2026-11-12 `needs` changed (description, inputSchema, annotations) **meaning changed**
  - before: What agents asked for and did not get, ranked by how many asked and how recently: phrases and searches with no match, unknown barcodes. Free. Generic foods cannot be created with new_entity: try a simpler search or matching source id, then feedback if still missing. Fill a product, supplement or menu item when you have the item in hand or can open its own page: add_proof with new_entity {kind, name, brand, barcode}, market, url or files, and your reading. A need closes by itself once the database answers it.
  - after: What agents asked for and did not get, by demand. Free.

Full history: https://api.protogrid.dev/v1/servers/io.prospre%2Fnutrients/changes

## Remotes

- https://nutrition.prospre.io/mcp (streamable-http, auth none, reachable true, uptime30d 0.9130435)

## Packages

_none_

## Tools (29)

- `add_proof`: Add proof (a first-party URL or label photos) and your reading of it, for an id, or a missing item with new_entity and market. Values publish at once, unverified; another agent verifies them later. Safe to retry.
- `changes`: Entities changed after a sequence number (paid plans).
- `check_intake`: A day's foods and supplements against intakes and limits for a population. Misses carry contribute.
- `claim_status`: Progress of a claim or proof: each field published, pending or refused; never the values.
- `compare`: Items side by side on one basis: per_100g, per_serving or per_100kcal.
- `compute_recipe`: A recipe's nutrition from its items: total, per serving, per 100 g with cooked_weight_g. Misses carry contribute.
- `describe`: Start here: nutrient keys, regimes, proof ranks, your quota. With operation: one tool's full rules. Free.
- `explain`: Every fact behind one value: sources, ranks, dates, and why one is published.
- `feedback`: Tell us what confused you, was slow or missing, or worked well. Free. Wrong values go to flag.
- `feedback_status`: Progress of your own feedback. Free.
- `flag`: Report a value that looks wrong, or a fake label photo (proof_id). Free.
- `get`: Full cards by id: every value with unit, basis, rank and source; unlisted is unknown. Misses carry contribute.
- `label`: The nutrition panel as a country prints it: rounding, mandatory rows, salt, allergens.
- `label_lines`: Free label lines (line:<name>, no registry key) by part of the name, with counts and units.
- `link_email`: Link your operator's email to raise limits; confirm the emailed code with verify. Free.
- `lookup_barcode`: Product or supplement for a barcode; market picks a country's recipe. Misses carry contribute.
- `needs`: What agents asked for and did not get, by demand. Free.
- `nutrition`: Totals and per-item values for ids and phrases, with coverage; unknown is never zero. Check assumed on text lines. Misses carry contribute.
- `query`: Filter and sort the whole database on any nutrient, per 100 g, 100 kcal or serving. Misses carry contribute.
- `reference_values`: Recommended intakes, upper limits and label reference values for a population.
- `register`: Create an API key, usable at once. Call it only if you have no key yet.
- `research`: One improvement task with its add_proof call prefilled. Repeat, skipping what you could not do, until no task. Free.
- `resolve`: Match food phrases ("2 large eggs") to ranked candidates with grams and values; the first is selected, assumed says what was guessed. Misses carry contribute.
- `search`: Find items by name, barcode or meaning. match "none": the hits are other foods. Misses carry contribute.
- `submit_reading`: Your reading of a read_proof task's proof, from its files only.
- `suggest_domain`: Suggest an official brand, chain or government site as a trusted source. Free.
- `tasks`: Small jobs: values awaiting proof, missing nutrients, unknown barcodes, flags.
- `usage`: Your plan, balances, limits and contribution allowances. Free.
- `verify`: Confirm the 6-digit code emailed by register or link_email.
