# NL;NL Labs

> Free daily AI pricing per right answer, for business jobs.

- name: com.nlnllabs/results
- version: 1.1.3
- connection class: R0 (autonomous)
- trust: 94/100
- quality: 94/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.nlnllabs%2Fresults
- tools: https://api.protogrid.dev/v1/servers/com.nlnllabs%2Fresults/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "results": {
      "type": "http",
      "url": "https://mcp.nlnllabs.com/mcp"
    }
  }
}
```


## Trust

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

## Quality 94/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### 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: 100 (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`: 4 of 4 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 989 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 3 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: 4, about 989 tokens to load them all
- tool set hash: bccb344d9859ff9c840569018381a6c3
- tools last changed: 2026-11-13T07:38:43.894Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.nlnllabs/results.svg)](https://protogrid.dev/servers/com.nlnllabs/results)
- 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-13 `get_day_results` changed (description)
  - before: Use to compare the models and systems on one job on one day. Leave date out for the newest day. Returns every model's and system's published result that day, NL;NL Labs' own models and systems marked. Extract's documents days also carry invented, missed and unreadable counts. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
  - after: Use to compare the models and systems on one job on one day. Leave date out for the newest day. Returns every model's and system's published result that day, NL;NL Labs' own models and systems marked. On a job with two tests, the answer says what they are. Extract's documents days also carry invented, missed and unreadable counts. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- 2026-11-13 `get_model_history` changed (description)
  - before: Use to follow one model on one job over time (for example, has it got cheaper or worse). Returns its published days: right answers, items, cost per 1,000 right in US dollars and IPD (right answers per dollar). On Extract, every row names its test; the answer says what the two tests are, and rows before and after 4 Nov come from different tests. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
  - after: Use to follow one model on one job over time (for example, has it got cheaper or worse). Returns its published days: right answers, items, cost per 1,000 right in US dollars and IPD (right answers per dollar). On a job with two tests (Extract, Classify), every row names its test; the answer says what the two tests are and when each ran, and rows from the two tests are not comparable. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- 2026-11-12 `get_day_results` changed (inputSchema)
- 2026-11-12 `get_model_history` changed (inputSchema)
- 2026-11-12 `get_pick` changed (inputSchema)
- 2026-11-11 `get_day_results` changed (inputSchema)
- 2026-11-11 `get_model_history` changed (description, inputSchema)
  - before: Use to follow one model on one job over time (for example, has it got cheaper or worse). Returns its published days: right answers, items, cost per 1,000 right in US dollars and IPD (right answers per dollar). Model names come from list_jobs. On Extract, every row names its test; the answer says what the two tests are, so read cost across 4 Nov with that in mind. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
  - after: Use to follow one model on one job over time (for example, has it got cheaper or worse). Returns its published days: right answers, items, cost per 1,000 right in US dollars and IPD (right answers per dollar). On Extract, every row names its test; the answer says what the two tests are, and rows before and after 4 Nov come from different tests. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- 2026-11-11 `get_pick` changed (description, inputSchema)
  - before: Returns the job page's latest published pick. It can be a model or a system. A pick marked "Not open yet." cannot be used yet. Returns the model or system the job page shows as its pick (NL;NL Desk is a system, not a model. Not open yet.), with the page's label and rule, the figures as the page shows them (right answers per $1, cost per 1,000 right), the pick's own date and that model's day row. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
  - after: Use it when someone asks which model to use for a job. Returns the job page's latest published pick. The pick is always an outside model: NL;NL Labs' own models and systems (NL;NL Pull, NL;NL Desk) are never the pick. When one of ours would have been the pick under the same rule, the answer adds an "ours" entry with its figures, marked as ours, not as the pick. Returns the model the job page shows as its pick, with the page's label and rule, the figures as the page shows them (right answers per $1, cost per 1,000 right), the pick's own date and that model's day row. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- 2026-11-11 `list_jobs` changed (description)
  - before: Call this first. Lists the jobs NL;NL Labs tests every day, what each one asks, what counts as right (the site's own words), the models and systems tested on each job (names for the other tools come from here) and the dates covered. NL;NL Labs' own models are marked; NL;NL Desk is a system, not a model. Not open yet.
  - after: Lists the jobs NL;NL Labs tests every day, what each one asks, what counts as right (the site's own words), the models and systems tested on each job and the dates covered. NL;NL Labs' own models are marked; NL;NL Desk is a system, not a model. Not open yet.

Full history: https://api.protogrid.dev/v1/servers/com.nlnllabs%2Fresults/changes

## Remotes

- https://mcp.nlnllabs.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.85714287)

## Packages

_none_

## Tools (4)

- `get_day_results`: Use to compare the models and systems on one job on one day. Leave date out for the newest day. Returns every model's and system's published result that day, NL;NL Labs' own models and systems marked. On a job with two tests, the answer says what they are. Extract's documents days also carry invented, missed and unreadable counts. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- `get_model_history`: Use to follow one model on one job over time (for example, has it got cheaper or worse). Returns its published days: right answers, items, cost per 1,000 right in US dollars and IPD (right answers per dollar). On a job with two tests (Extract, Classify), every row names its test; the answer says what the two tests are and when each ran, and rows from the two tests are not comparable. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- `get_pick`: Use it when someone asks which model to use for a job. Returns the job page's latest published pick. The pick is always an outside model: NL;NL Labs' own models and systems (NL;NL Pull, NL;NL Desk) are never the pick. When one of ours would have been the pick under the same rule, the answer adds an "ours" entry with its figures, marked as ours, not as the pick. Returns the model the job page shows as its pick, with the page's label and rule, the figures as the page shows them (right answers per $1, cost per 1,000 right), the pick's own date and that model's day row. Fields: cost_per_1000_right_usd and ipd are exact; cost_shown and ipd_shown are how the page shows them. assembled_by_us is 1 when the answer was assembled by us, else 0. A count marked "not published for this model" is not published for that model.
- `list_jobs`: Lists the jobs NL;NL Labs tests every day, what each one asks, what counts as right (the site's own words), the models and systems tested on each job and the dates covered. NL;NL Labs' own models are marked; NL;NL Desk is a system, not a model. Not open yet.
