# io.github.devlollc/torneo

> Observatory operated and funded by devlo: real tools on frozen tasks; intervals, cost, limits.

- name: io.github.devlollc/torneo
- version: 0.1.1
- connection class: R0 (autonomous)
- trust: 94/100
- quality: 67/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.devlollc%2Ftorneo
- tools: https://api.protogrid.dev/v1/servers/io.github.devlollc%2Ftorneo/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "torneo": {
      "type": "http",
      "url": "https://torneo.ai/api/mcp"
    }
  }
}
```


## Trust

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

## Quality 67/100 (needs work)

### 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: 71 (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
- 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: get_results (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_need (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); explain_limits (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,578 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 11 tool changes in 30 days
- fail `stability.rug_pull`: 4 tools kept their name but changed most of their description in 30 days; review before trusting them

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

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

- tools: 9, about 1,578 tokens to load them all
- tool set hash: b547deb47c6f11213936d68c76fad1f4
- tools last changed: 2026-10-20T02:55:22.169Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.devlollc/torneo.svg)](https://protogrid.dev/servers/io.github.devlollc/torneo)
- 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-20 `decide` added
  - Read-only decision.v1 for one category and a declared context: constraint applicability first, then EVIDENCE or ABSTAIN with a stable reason_code (answer_rule.v3). An abstention removes the verdict only; evidence, reservations and gaps stay. Never a rank on overlapping intervals. Replay and attestation verdicts are as of the last build.
- 2026-10-20 `get_need` changed (description)
  - before: Follow need-id in the durable published snapshot. Unknown means partial, not refused. State publication is asynchronous.
  - after: Follow need-id in current private-store state when configured, otherwise the published snapshot. Unknown or unavailable means partial, not refused.
- 2026-10-20 `get_auto_tournament` changed (description)
  - before: Published snapshot of automatic attempts, including failures. No execution is triggered.
  - after: Automatic attempts, including failures: current private-store state when configured, otherwise a published snapshot. No execution is triggered.
- 2026-10-16 `get_need` added
  - Follow need-id in the durable published snapshot. Unknown means partial, not refused. State publication is asynchronous.
- 2026-10-16 `request_tournament` added
  - Request a tournament using need.v1. Advisory only; never starts a run or spends. Follow the returned id with get_need.
- 2026-10-16 `submit_need` added
  - Log an advisory need.v1 request. Do not include personal or secret data. Returns need-id; persistence is partial until private ingestion and publication.
- 2026-10-16 `get_auto_tournament` added
  - Published snapshot of automatic attempts, including failures. No execution is triggered.
- 2026-10-16 `explain_limits` changed (title, description, inputSchema) **meaning changed**
  - before: Returns what a category's (or run's) result can and cannot tell you: status and its meaning, fixture flag, freshness, expiry, explicit limits, conflicts, funding, published errata (each chained to the served result hash), the legal preflight verdict per tool including tools not run, and the answer rule every consumer must follow.
  - after: Limits, freshness, conflicts and answer rule of a category or run. Read before citing evidence.
- 2026-10-16 `get_run` changed (title, description, inputSchema) **meaning changed**
  - before: Returns the canonical result bundle of one run (schema result.v1): protocol lock hash, provenance, reproduce command, per-participant outcomes with intervals. A PRE-REGISTERED run, whose protocol is frozen and timestamped but which has not been executed, returns state PRE_REGISTERED with measured false, its lock and its frozen files, and no result: nothing has been measured yet.
  - after: Canonical result bundle or explicit PRE_REGISTERED state. Unknown cost is null / UNKNOWN.
- 2026-10-16 `get_results` changed (title, description, inputSchema) **meaning changed**
  - before: Answers for one category with the canonical answer rule: never 'the best tool', only the best observed evidence for this task, this context, at this date, with intervals, costs, conflicts and limits. On a STALE, SUPERSEDED or INDETERMINATE result the answer is INSUFFICIENT_EVIDENCE and carries no rank. Identical to `torneo query <category>` on the CLI.
  - after: Canonical evidence for a category. Cite observed_at, uncertainty and limits; never the best tool. INSUFFICIENT_EVIDENCE is not a ranking.

Full history: https://api.protogrid.dev/v1/servers/io.github.devlollc%2Ftorneo/changes

## Remotes

- https://torneo.ai/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (9)

- `decide`: Read-only decision.v1 for one category and a declared context: constraint applicability first, then EVIDENCE or ABSTAIN with a stable reason_code (answer_rule.v3). An abstention removes the verdict only; evidence, reservations and gaps stay. Never a rank on overlapping intervals. Replay and attestation verdicts are as of the last build.
- `explain_limits`: Limits, freshness, conflicts and answer rule of a category or run. Read before citing evidence.
- `get_auto_tournament`: Automatic attempts, including failures: current private-store state when configured, otherwise a published snapshot. No execution is triggered.
- `get_need`: Follow need-id in current private-store state when configured, otherwise the published snapshot. Unknown or unavailable means partial, not refused.
- `get_results`: Canonical evidence for a category. Cite observed_at, uncertainty and limits; never the best tool. INSUFFICIENT_EVIDENCE is not a ranking.
- `get_run`: Canonical result bundle or explicit PRE_REGISTERED state. Unknown cost is null / UNKNOWN.
- `list_categories`: Discover categories with dated status and fixture flags. Fixtures are synthetic, never real evidence.
- `request_tournament`: Request a tournament using need.v1. Advisory only; never starts a run or spends. Follow the returned id with get_need.
- `submit_need`: Log an advisory need.v1 request. Do not include personal or secret data. Returns need-id; persistence is partial until private ingestion and publication.
