# Crovia — verifiable silence (TACET) and Crovia Seal

> Signed, Bitcoin-anchored observations of AI training-data disclosure; verifies silence proofs, seals

- name: com.croviatrust/crovia
- version: 2.0.1
- connection class: R0 (autonomous)
- trust: 99/100
- quality: 69/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.croviatrust%2Fcrovia
- tools: https://api.protogrid.dev/v1/servers/com.croviatrust%2Fcrovia/tools

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

## Connection (mcpServers)

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


## Trust

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

## Quality 69/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 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: 86 (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
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: silence_report (destructiveHint, idempotentHint); verify_seal (destructiveHint, idempotentHint); crovia_status (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 1,534 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`: 8 tool changes in 30 days
- fail `stability.rug_pull`: 7 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: 8, about 1,534 tokens to load them all
- tool set hash: acb7cad8e853bc540e4ee863afe66d21
- tools last changed: 2026-10-08T22:43:18.539Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.croviatrust/crovia.svg)](https://protogrid.dev/servers/com.croviatrust/crovia)
- 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-08 `crovia_vs_causari` changed (description, annotations) **meaning changed**
  - before: Disambiguate Crovia (AI training-data disclosure observatory) from Causari (code-provenance developer tool).
  - after: Which product is which. Crovia observes training-data disclosure. Causari is the code-provenance tool. No parameters. Use this, not explain and not crovia_status, when the question is the difference between the two. Reads no catalog.
- 2026-10-08 `explain` changed (description, inputSchema, annotations) **meaning changed**
  - before: Canonical definitions of Crovia terms: tacet, silence, lacuna, seal, epoch, pnx, predicate, canon. Without a term, returns all.
  - after: The definition of one Crovia term. Allowed terms: tacet, silence, lacuna, seal, epoch, pnx, predicate, canon. Omit term, or pass an empty or blank string, to receive every definition. Any other value is an error listing those allowed terms, and it does not return the definitions. Use crovia_vs_causari, not explain, to tell the two products apart.
- 2026-10-08 `silence_report` changed (description, inputSchema, annotations) **meaning changed**
  - before: Facts of the weekly Silence Report: models observed, epochs closed and anchored, negative snapshots, proofs, longest verifiable silences. Latest week by default, or a given ISO week like '2026-W38'.
  - after: One published weekly Silence Report, or the latest report index. week is an ISO week YYYY-Www, for example 2026-W38. Omit week, or pass an empty string, to receive the latest index rather than one week's facts. A week that is not YYYY-Www is an error. A week with no published file is an error and names the index. This is not the live status and not one model's proof. Reads published files only.
- 2026-10-08 `verify_seal` changed (description, inputSchema, annotations)
  - before: Verify a crovia.seal.v1 object or a wrapped TACET silence proof offline: signature, canonical bytes, bindings, per-epoch non-inclusion paths. Pass the object as 'seal' or a croviatrust.com URL as 'url'. check_anchors=true also checks the drand round and the Bitcoin anchors (network).
  - after: Check a crovia.seal.v1 object or a wrapped TACET silence proof: signature, canonical bytes, bindings, and per-epoch non-inclusion paths. Pass seal as a JSON object or a JSON string, or url as an https://croviatrust.com/ address. With neither, the call is an error. Supplying url fetches that URL over the network. check_anchors defaults to false; true also checks the drand round bytes and the Bitcoin anchors over the network. A seal object with check_anchors false or omitted is checked from that object alone. This tool can reach the network, so it is not a closed-world call.
- 2026-10-08 `get_silence_proof` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: The published TACET silence proof for a model (or the index of all proofs): silence_days, observed window, epochs, seal id, URL, and how to verify it in the browser, in Python, or with verify_seal. Set include_bundle=true to receive the full crovia.seal.v1 bundle.
  - after: The published silence proof for one model: silence_days, observed window, epochs, seal id, URL, and how to verify it. model omitted or empty returns the proof index, not a bundle. include_bundle defaults to false; true attaches the crovia.seal.v1 bundle for that one model and does nothing on the index. This is not the live totals and not the weekly report. Reads published files only.
- 2026-10-08 `search_models` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Find observed models by substring of their id (e.g. 'mistral'). Returns id, live status, last result and record URL.
  - after: A page of observed model ids whose id contains query, compared case-insensitively, in catalog order, not a ranking. query omitted or empty matches the whole catalog and still returns at most limit rows. limit follows the historical rule: a missing, empty, zero or other falsy value is 25; any value int() accepts is then clamped into 1..100 (500 becomes 100, a negative becomes 1); a value int() cannot parse is an error and nothing is searched. returned and its compatibility alias count are the rows in this page. matched is how many ids match before the limit. catalog_total and its compatibility alias total_records are every record in the catalog, matching or not. limit is the limit actually applied. count is not the match count, and total_records is not the match count. This is not a verdict and not a proof. Reads published files only.
- 2026-10-08 `lookup_model` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: What Crovia has observed about one AI model (Hugging Face id, e.g. 'Qwen/Qwen3-32B'): latest verdict on the monitored surface, negative snapshots and how many are Bitcoin-anchored, the published silence proof if any, the 2026-archive silence, badge and record URLs.
  - after: One model's observation: latest verdict, negative snapshots, anchored epochs, silence proof pointer, archive silence, badge and record URL. Required model is a Hugging Face id, org/name, for example Qwen/Qwen3-32B. An empty model is an error. An exact id is used; otherwise one case-insensitive substring match is accepted, and several matches return candidates instead of a verdict. This is not a catalog page, not the weekly report, and not the seal bytes. Reads published files only.
- 2026-10-08 `crovia_status` changed (description, annotations) **meaning changed**
  - before: Live totals of Crovia's TACET log: epochs closed and anchored in Bitcoin, models on the map, negative snapshots, signed silence proofs, the longest verifiable silence and the latest weekly Silence Report. Every figure with its source URL.
  - after: Live totals at this moment: epochs closed, epochs anchored in Bitcoin, models on the map, snapshot counts, signed silence proofs, and a pointer to the longest verifiable silence. No parameters. This is not a weekly Silence Report, not one model's record, and not a proof bundle. Reads published files only.

Full history: https://api.protogrid.dev/v1/servers/com.croviatrust%2Fcrovia/changes

## Remotes

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

## Packages

_none_

## Tools (8)

- `crovia_status`: Live totals at this moment: epochs closed, epochs anchored in Bitcoin, models on the map, snapshot counts, signed silence proofs, and a pointer to the longest verifiable silence. No parameters. This is not a weekly Silence Report, not one model's record, and not a proof bundle. Reads published files only.
- `crovia_vs_causari`: Which product is which. Crovia observes training-data disclosure. Causari is the code-provenance tool. No parameters. Use this, not explain and not crovia_status, when the question is the difference between the two. Reads no catalog.
- `explain`: The definition of one Crovia term. Allowed terms: tacet, silence, lacuna, seal, epoch, pnx, predicate, canon. Omit term, or pass an empty or blank string, to receive every definition. Any other value is an error listing those allowed terms, and it does not return the definitions. Use crovia_vs_causari, not explain, to tell the two products apart.
- `get_silence_proof`: The published silence proof for one model: silence_days, observed window, epochs, seal id, URL, and how to verify it. model omitted or empty returns the proof index, not a bundle. include_bundle defaults to false; true attaches the crovia.seal.v1 bundle for that one model and does nothing on the index. This is not the live totals and not the weekly report. Reads published files only.
- `lookup_model`: One model's observation: latest verdict, negative snapshots, anchored epochs, silence proof pointer, archive silence, badge and record URL. Required model is a Hugging Face id, org/name, for example Qwen/Qwen3-32B. An empty model is an error. An exact id is used; otherwise one case-insensitive substring match is accepted, and several matches return candidates instead of a verdict. This is not a catalog page, not the weekly report, and not the seal bytes. Reads published files only.
- `search_models`: A page of observed model ids whose id contains query, compared case-insensitively, in catalog order, not a ranking. query omitted or empty matches the whole catalog and still returns at most limit rows. limit follows the historical rule: a missing, empty, zero or other falsy value is 25; any value int() accepts is then clamped into 1..100 (500 becomes 100, a negative becomes 1); a value int() cannot parse is an error and nothing is searched. returned and its compatibility alias count are the rows in this page. matched is how many ids match before the limit. catalog_total and its compatibility alias total_records are every record in the catalog, matching or not. limit is the limit actually applied. count is not the match count, and total_records is not the match count. This is not a verdict and not a proof. Reads published files only.
- `silence_report`: One published weekly Silence Report, or the latest report index. week is an ISO week YYYY-Www, for example 2026-W38. Omit week, or pass an empty string, to receive the latest index rather than one week's facts. A week that is not YYYY-Www is an error. A week with no published file is an error and names the index. This is not the live status and not one model's proof. Reads published files only.
- `verify_seal`: Check a crovia.seal.v1 object or a wrapped TACET silence proof: signature, canonical bytes, bindings, and per-epoch non-inclusion paths. Pass seal as a JSON object or a JSON string, or url as an https://croviatrust.com/ address. With neither, the call is an error. Supplying url fetches that URL over the network. check_anchors defaults to false; true also checks the drand round bytes and the Bitcoin anchors over the network. A seal object with check_anchors false or omitted is checked from that object alone. This tool can reach the network, so it is not a closed-world call.
