# Why would anyone want to know so much about Uruguay?

We can’t say either. But it is all here: every animal declared to DICOSE in 2024 and 2025, department by department, as linked data that remembers where each number came from; every dataset in Uruguay’s open-data catalogue, findable by what it means; and notebooks, notes and a personal agent to read them with. It is built for agents. People are welcome, and get the notebooks.

cow-tools (https://cow-tools.sophia-labs.com/) is a proof of concept by Sophia Labs. This is the front page as markdown; the same page as HTML is https://cow-tools.sophia-labs.com/ and the datasets as schema.org JSON-LD are https://cow-tools.sophia-labs.com/datasets.jsonld.

## Notebooks

Questions put to the data, with the working shown. Each one is a page to read, an `.ipynb` to run, and markdown for your agent.

- [The national herd at a glance](https://cow-tools.sophia-labs.com/notebooks/national-herd/index.md): Uruguay's holders declared 12,265,269 cattle on 30 June 2025 (11,583,321 beef and 681,948 dairy) and 4,799,066 sheep. On 2024, cattle changed +1.05% and sheep -11.47%. (page https://cow-tools.sophia-labs.com/notebooks/national-herd/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/national-herd/national-herd.ipynb)
- [Cattle and sheep, department by department](https://cow-tools.sophia-labs.com/notebooks/cattle-and-sheep/index.md): Only Salto and Artigas still have more sheep than cattle by heads (53.5% and 51.9% sheep). The national flock fell 11.5% in one year, from 5,420,661 to 4,799,066: 621,595 fewer sheep. (page https://cow-tools.sophia-labs.com/notebooks/cattle-and-sheep/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/cattle-and-sheep/cattle-and-sheep.ipynb)
- [Dairy country](https://cow-tools.sophia-labs.com/notebooks/dairy-country/index.md): Florida, San José, Colonia produce 68.3% of Uruguay's milk (2,298.4 million litres in 2025, +1.67% on 2024). Florida makes the most: 26.5%. (page https://cow-tools.sophia-labs.com/notebooks/dairy-country/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/dairy-country/dairy-country.ipynb)
- [Breeders in the east, finishers in the west](https://cow-tools.sophia-labs.com/notebooks/herd-structure/index.md): Maldonado is the most breeding-heavy department: 71.7% of its beef herd is breeding cows and calves. Soriano leans hardest to finishing: 29.8% steers and fattening cows. The east breeds; the west finishes. (page https://cow-tools.sophia-labs.com/notebooks/herd-structure/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/herd-structure/herd-structure.ipynb)
- [How hard the land is stocked](https://cow-tools.sophia-labs.com/notebooks/stocking-intensity/index.md): Uruguay carries 0.856 cattle per hectare of livestock land (12,265,269 cattle on 14.32 million ha). The densest department, San José, carries 1.67; the sparsest of the big grazing departments, Artigas, 0.65. (page https://cow-tools.sophia-labs.com/notebooks/stocking-intensity/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/stocking-intensity/stocking-intensity.ipynb)
- [One year on, 2024 to 2025](https://cow-tools.sophia-labs.com/notebooks/year-over-year/index.md): Between the 2024 and 2025 declarations Uruguay gained 127,121 cattle (+1.05%) and lost 621,595 sheep (-11.47%), while the number of holders declaring beef cattle went from 61,561 to 59,121 (-4.0%): more cattle, fewer hands. (page https://cow-tools.sophia-labs.com/notebooks/year-over-year/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/year-over-year/year-over-year.ipynb)
- [The herd ledger](https://cow-tools.sophia-labs.com/notebooks/herd-ledger/index.md): Uruguay's cattle books balance only if 2,300,543 head left the farms between the 2024 and 2025 declarations: 18.95% of the opening herd. Calves born (2,697,988) outran deaths (247,498), home slaughter (22,826) and the herd's own growth (+127,121). (page https://cow-tools.sophia-labs.com/notebooks/herd-ledger/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/herd-ledger/herd-ledger.ipynb)
- [Finding other Uruguay data](https://cow-tools.sophia-labs.com/notebooks/finding-other-data/index.md): Against the 2011 census (the latest by department in the catalogue's file), Uruguay has 3.73 cattle per person. In Durazno it is 16.7; in Montevideo, 0.0021. The dataset was found by meaning in the catalogue graph, fetched from the link its DCAT record gives, and joined on the department codes. (page https://cow-tools.sophia-labs.com/notebooks/finding-other-data/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/finding-other-data/finding-other-data.ipynb)
- [Ask the agent](https://cow-tools.sophia-labs.com/notebooks/ask-the-agent/index.md): Start a personal agent over the herd data from Python, with your own OpenRouter key, and check its answer against the cube. (page https://cow-tools.sophia-labs.com/notebooks/ask-the-agent/index.html, notebook https://cow-tools.sophia-labs.com/notebooks/ask-the-agent/ask-the-agent.ipynb)

## The guide

A document for each of the nineteen departments, a glossary of what DICOSE means by a vaquillona, a reading path for the newly curious, and a companion note for every notebook. Pages to read here, each with a markdown twin for your agent. Read it at https://cow-tools.sophia-labs.com/guide/ (38 pages; each has a markdown twin, listed at https://cow-tools.sophia-labs.com/guide/index.md), or through the MCP endpoint below.

## The data

### Uruguay's livestock, 2024 and 2025 (`uruguay-cows`)

Every head of cattle, sheep, horse, pig and goat declared to DICOSE in 2024 and 2025, by department, species and category, as an RDF Data Cube with its provenance.

- Size: 1,080,525 observations · 25,893,355 triples
- Source: MGAP, DICOSE – SNIG: Declaración Jurada de Existencias 2024 and 2025 (Ministerio de Ganadería, Agricultura y Pesca (MGAP)): https://catalogodatos.gub.uy/dataset/mgap-datos-preliminares-basados-en-la-declaracion-jurada-de-existencias-dicose-snig-2024 , https://catalogodatos.gub.uy/dataset/mgap-datos-preliminares-basados-en-la-declaracion-jurada-de-existencias-dicose-snig-2025
- Licence: Licencia de Datos Abiertos del Uruguay (https://www.gub.uy/agencia-gobierno-electronico-sociedad-informacion-conocimiento/sites/agencia-gobierno-electronico-sociedad-informacion-conocimiento/files/documentos/publicaciones/licencia_de_datos_abiertos_0.pdf)
- Attribution: Fuente: MGAP – DICOSE/SNIG, Declaración Jurada de Existencias 2024 y 2025 (catalogodatos.gub.uy). Restructured as linked data by cow-tools; every number keeps its source.
- Freshness: files retrieved 2026-07-05 · source updated 2026-06-10 (2024) and 2026-06-17 (2025)

### Uruguay's open-data catalogue, all of it (`uruguay-catalogue`)

Every dataset on catalogodatos.gub.uy (the national catalogue), harvested as DCAT and searchable by what it means rather than what it is called.

- Size: 2,718 datasets · 70 publishers · 258,246 triples (the whole catalogue on 2026-10-14)
- Source: Catálogo Nacional de Datos Abiertos (catalogodatos.gub.uy) (AGESIC and the publishing agencies): https://catalogodatos.gub.uy/
- Licence: Each entry keeps its publisher's licence (most: Licencia de Datos Abiertos del Uruguay) (https://www.gub.uy/agencia-gobierno-electronico-sociedad-informacion-conocimiento/sites/agencia-gobierno-electronico-sociedad-informacion-conocimiento/files/documentos/publicaciones/licencia_de_datos_abiertos_0.pdf)
- Attribution: Fuente: Catálogo Nacional de Datos Abiertos, catalogodatos.gub.uy; each dataset's publisher as named in its entry.
- Freshness: harvested 2026-10-14 from the CKAN API · refreshed by re-running the harvest, not on a schedule

### The guide (`cow-tools-guide`)

Notes kept by Sophia: a document per department, a glossary, a reading path, and the story behind every notebook. Read it at /guide/.

- Size: 36 documents
- Source: Written by Sophia from the two datasets above (Sophia Labs): https://cow-tools.sophia-labs.com/
- Licence: CC BY 4.0 (Sophia's guide documents and notebooks; the data keeps its own licence) (https://creativecommons.org/licenses/by/4.0/)
- Attribution: cow-tools, Sophia Labs.
- Freshness: last edited 2026-10-14

## Connect your agent

### 1. Read: MCP, read-only, no account and no key

`https://cow-tools.sophia-labs.com/mcp` (streamable HTTP, JSON-RPC 2.0). The tools are listed live by `tools/list`: the curated `cow_*` tools (herds by department, species, category and year; rankings; comparisons; quality warnings), SPARQL, semantic search and the guide's documents.

- Claude Code: `claude mcp add --transport http cow-tools https://cow-tools.sophia-labs.com/mcp`
- Claude Desktop, claude.ai, ChatGPT: add a custom connector with the URL above and no authentication.
- Cursor (`~/.cursor/mcp.json`): `{"mcpServers": {"cow-tools": {"url": "https://cow-tools.sophia-labs.com/mcp"}}}`
- Discovery: `https://cow-tools.sophia-labs.com/.well-known/ai-catalog.json` lists the MCP server card.

### 2. Talk: a personal agent of your own, over the ride protocol

Create a session, prompt it, watch it answer, come back later. It runs on your OpenRouter key (header `X-Model-Key`) or on a Sophia account (header `Authorization: Bearer <token>`; $0.50 of credit to start, cheap models). Never put a key in a URL.

```sh
B=https://cow-tools.sophia-labs.com/services/vehicle/g/uruguay-cows
H=(-H "X-Model-Key: $OPENROUTER_API_KEY" -H "x-vehicle-client-id: my-agent-1" -H "content-type: application/json")
curl -s "$B/sessions" "${H[@]}" -d '{"requestId":"new-1","model":"openrouter/openai/gpt-6-luna"}'      # → session.created, value.session.sessionId
curl -s "$B/sessions/$SID/commands" "${H[@]}" -d '{"requestId":"q-1","op":"prompt","text":"How many dairy cows were declared in Florida in 2025?"}'
curl -sN "$B/sessions/$SID/events?since=0" "${H[@]}" -H "accept: text/event-stream"           # or ?since=0&waitMs=25000 (long-poll)
```

Or with `vehicle ride` (JSONL over stdio; https://github.com/sophia-labs/vehicle, MIT):

```sh
cargo install --locked --git https://github.com/sophia-labs/vehicle      # Rust 1.88+; on Linux also libssl-dev and pkg-config
export VEHICLE_MODEL_KEY=sk-or-…                  # your OpenRouter key, read from the environment, never argv
vehicle ride --gardend https://cow-tools.sophia-labs.com --graph uruguay-cows --new --client-id my-agent-1
# then one request per line: {"op":"prompt","requestId":"r1","text":"…"} and {"op":"watch","requestId":"w1","waitMs":30000}
```

The ride protocol (`sophia.vehicle-ride.v2`), under https://cow-tools.sophia-labs.com/services/vehicle/g/uruguay-cows: every answer is one frame, `{"protocol":"sophia.vehicle-ride.v2","type":…,"value":…}`, or an error frame with a `code` and a `message`. A `requestId` makes any request safe to repeat. `x-vehicle-client-id` names your client; one client drives a session at a time (the lease).

- `POST /sessions` {requestId, model?, budget?}: a session; you hold its lease (`session.created`, `value.session.sessionId`)
- `GET /sessions`: your sessions, newest first
- `GET /sessions/<id>`: the transcript, and the cursor to watch from
- `POST /sessions/<id>/claim` {requestId}: drive it again after a while
- `POST /sessions/<id>/commands` {requestId, op: prompt | follow_up | steer | abort | fork | clone, text?}
- `GET /sessions/<id>/events?since=<seq>`: SSE with `accept: text/event-stream`, or `&waitMs=25000` to long-poll; events `command.delivered`, `message.delta` (text as it comes), `tool.started`, `tool.result`, `message.completed`, `budget.exceeded`, `run.settled`
- `PATCH /sessions/<id>` {title}, `DELETE /sessions/<id>`: rename it, or put it away

A session is yours: only you read it or drive it, and it waits for you. The whole protocol, every route, event and error code: https://cow-tools.sophia-labs.com/protocol/ride-v2.md (as a page: https://cow-tools.sophia-labs.com/protocol/index.html).

### Ask it something

- “How many dairy cows were declared in Florida in 2025?” → 100,116 dairy cows on dairy holdings (79,048 milking, 21,068 dry: DICOSE's PD+PF count); 103,472 counting every holding (PD+AD). (cow_herd (uruguay-cows), exact to the DICOSE 2025 CSV)
- “Find a dataset about electricity consumption by department.” → None by department: no departmental electricity-consumption series is on the catalogue. The nearest it finds: MIEM's industrial energy consumption surveys (first) and MIDES's households lacking electricity, by department (fourth). (semantic search over uruguay-catalogue)
- “Which department had the most sheep in 2024, and how many?” → Salto, with 1,151,124 sheep (then Artigas, 888,293). (cow_rank (uruguay-cows))

## Next

- `curl https://cow-tools.sophia-labs.com/llms.txt`: the short index for agents
- `curl https://cow-tools.sophia-labs.com/llms-full.txt`: everything in one file, notebooks included
- `curl https://cow-tools.sophia-labs.com/datasets.jsonld`: the datasets as schema.org Dataset (DCAT-friendly)
- `curl https://cow-tools.sophia-labs.com/.well-known/ai-catalog.json`: the MCP server card, for discovery
