# OpenArg — Argentina public data

> Argentina's official public data (INDEC, BCRA, 38 portals): search, read tables, cited answers.

- name: org.openarg/datos-publicos
- version: 1.0.0
- connection class: R1 (autonomous)
- trust: 96/100
- quality: 73/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/org.openarg%2Fdatos-publicos
- tools: https://api.protogrid.dev/v1/servers/org.openarg%2Fdatos-publicos/tools

**An agent can connect on its own if it already holds `DATOS_PUBLICOS_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "datos-publicos": {
      "type": "http",
      "url": "https://mcp.openarg.org/mcp",
      "headers": {
        "Authorization": "Bearer ${DATOS_PUBLICOS_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${DATOS_PUBLICOS_TOKEN}`.

## Trust

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

## Quality 73/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: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 5 of 6 tools declare all four hints; missing: listar_fuentes (openWorldHint)
- pass `tools.token_cost`: about 2,001 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`: 6 tool changes in 30 days
- fail `stability.rug_pull`: 2 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: 6, about 2,001 tokens to load them all
- tool set hash: 135bebcf94ac8b298347ab8754723c1c
- tools last changed: 2026-10-08T05:00:20.115Z
- badge: [![protogrid quality](https://protogrid.dev/badge/org.openarg/datos-publicos.svg)](https://protogrid.dev/servers/org.openarg/datos-publicos)
- 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 `agregar_datos` added
  - Calcula en la base una suma, promedio, conteo, mínimo o máximo, opcionalmente agrupado. Usala SIEMPRE que necesites un total, un promedio, un conteo, un mínimo/máximo o un ranking, en vez de traer filas con `obtener_datos` y hacer la cuenta vos: es exacta, no tiene el tope de 500 filas y gasta muchos menos tokens. - `operacion`: "suma", "promedio", "conteo", "minimo" o "maximo". - `columna`: la que se suma/promedia/etc. (nombres exactos de `describir_tabla`); no va con "conteo", que cuenta filas (si la mandás, da error). Las columnas de texto con números se leen según su formato (1.234,5 o 1,234.5); si el formato es ambiguo, no calcula y lo dice. - `agrupar_por`: hasta 3 columnas, p. ej. ["jurisdiccion_desc"] para un ranking. - `filtros`, `desde`, `hasta`, `columna_fecha`: como en `obtener_datos` (hasta 6 filtros). - `ordenar_por`: "valor" (por defecto, para rankings) o una columna de `agrupar_por` (p. ej. el año, para una serie). `orden`: "desc" (por defecto) o "asc". - `limite`: grupos a devolver, 1 a 200. - `ponderar_por`: la columna de ponderación de una encuesta (con "conteo" da la población estimada, no la cantidad de filas de la muestra). La respuesta dice sobre cuántas filas se calculó (`filas_usadas`, de todos los grupos) y si hay más grupos que `limite`. Si ninguna fila cumple los filtros no hay valor: dice qué valores existen. No descuenta preguntas.
- 2026-10-08 `obtener_datos` changed (description, inputSchema) **meaning changed**
  - before: Trae filas de una tabla, en CSV, con la fuente oficial. - `columnas`: las que quieras (por defecto, todas); nombres exactos de `describir_tabla`. - `desde` / `hasta`: período, como AAAA, AAAA-MM o AAAA-MM-DD, sobre la columna de fecha. - `filtros`: igualdad exacta por columna, p. ej. {"provincia": "Córdoba"} (hasta 5). - `orden`: "asc" o "desc" por fecha. `limite`: 1 a 500 filas. No descuenta preguntas.
  - after: Trae filas de una tabla, en CSV, con la fuente oficial. Para un total, promedio, conteo, mínimo, máximo o ranking NO traigas filas para sumarlas: usá `agregar_datos`. - `columnas`: las que quieras (por defecto, todas); nombres exactos de `describir_tabla`. - `desde` / `hasta`: período, como AAAA, AAAA-MM o AAAA-MM-DD, sobre la columna de fecha (o de año). - `filtros`: hasta 5. Igualdad: {"provincia": "Córdoba"}. Con operador, una lista: [{"columna": "monto", "operador": "mayor_que", "valor": "1000000"}, {"columna": "provincia", "operador": "en", "valores": ["Salta", "Jujuy"]}]. Operadores: =, !=, mayor_que, menor_que, >=, <=, contiene y en. La igualdad y `contiene` no distinguen mayúsculas ni acentos (en tablas de más de un millón de filas, sí: ahí la respuesta dice en `filtros_aplicados` qué se buscó tal cual). - `orden`: "asc" (por defecto: primero lo más viejo) o "desc" (primero lo más reciente), por fecha. Para el último dato de una serie, pedí "desc". - `limite`: 1 a 500 filas. Si hay más, la respuesta lo dice y da el `offset` de la página siguiente (hasta 10.000). - `columna_fecha`: opcional, otra columna de fecha para `desde`/`hasta` y el orden. Si ninguna fila cumple los filtros, la respuesta dice qué valores existen. No descuenta preguntas.
- 2026-10-08 `describir_tabla` changed (description) **meaning changed**
  - before: Muestra las columnas (con su tipo), cantidad de filas, período cubierto y una muestra de una tabla. `tabla` es el nombre que devuelve `buscar_datasets`. Usalo antes de `obtener_datos` para saber qué columnas pedir y qué fechas existen. No descuenta preguntas.
  - after: Muestra las columnas (con su tipo), cantidad de filas, período cubierto, frescura y una muestra de una tabla. `tabla` es el nombre que devuelve `buscar_datasets`. Usalo antes de `obtener_datos` o `agregar_datos` para saber qué columnas pedir y qué fechas existen. La frescura dice cuándo leyó OpenArg la tabla de su fuente, cuál es el último dato y, sólo si la tabla es una foto del período en curso, su fecha de corte. La fecha de lectura no es la de los datos: una tabla de un período pasado o sin columna de fecha no es vigente por haberse leído hoy. No presentes como actual un dato viejo. No descuenta preguntas.
- 2026-10-08 `consultar_datos_publicos` changed (description)
  - before: Responde una pregunta sobre datos públicos oficiales de Argentina, con fuentes. Ejemplos: "¿Cuál fue la tasa de desempleo del último trimestre?", "Evolución del IPC en 2025", "¿Cuántos diputados tiene cada bloque?", "Presupuesto ejecutado por el Ministerio de Salud en 2024". La respuesta incluye los datasets usados (con link al portal oficial), advertencias sobre la calidad o cobertura del dato, y cuántas preguntas le quedan este mes al usuario. Descuenta 1 de sus preguntas del mes (10 gratis): si podés responder con `buscar_datasets` + `obtener_datos`, preferí esas.
  - after: Responde una pregunta sobre datos públicos oficiales de Argentina, con fuentes. Ejemplos: "¿Cuál fue la tasa de desempleo del último trimestre?", "Evolución del IPC en 2025", "¿Cuántos diputados tiene cada bloque?", "Presupuesto ejecutado por el Ministerio de Salud en 2024". La respuesta incluye los datasets usados (con link al portal oficial), advertencias sobre la calidad o cobertura del dato, y cuántas preguntas le quedan este mes al usuario. Cada respuesta descuenta 1 de sus preguntas del mes (10 gratis); un error, un corte por tiempo o la misma pregunta repetida dentro de los 5 minutos no descuentan. Si podés responder con `buscar_datasets` + `obtener_datos` o `agregar_datos`, preferí esas.
- 2026-09-30 `listar_fuentes` changed (description)
  - before: Lista los portales de datos abiertos que cubre OpenArg y cuántos datasets tiene cada uno. No descuenta consultas del cupo diario.
  - after: Lista los portales de datos abiertos que cubre OpenArg y cuántos datasets tiene cada uno. No descuenta preguntas: cuenta como un pedido del modo datos.
- 2026-09-30 `consultar_datos_publicos` changed (description)
  - before: Responde una pregunta sobre datos públicos oficiales de Argentina, con fuentes. Ejemplos: "¿Cuál fue la tasa de desempleo del último trimestre?", "Evolución del IPC en 2025", "¿Cuántos diputados tiene cada bloque?", "Presupuesto ejecutado por el Ministerio de Salud en 2024". La respuesta incluye los datasets usados (con link al portal oficial), advertencias sobre la calidad o cobertura del dato, y cuántas consultas le quedan hoy al usuario. Descuenta 1 de las 10 preguntas diarias: si podés responder con `buscar_datasets` + `obtener_datos`, preferí esas.
  - after: Responde una pregunta sobre datos públicos oficiales de Argentina, con fuentes. Ejemplos: "¿Cuál fue la tasa de desempleo del último trimestre?", "Evolución del IPC en 2025", "¿Cuántos diputados tiene cada bloque?", "Presupuesto ejecutado por el Ministerio de Salud en 2024". La respuesta incluye los datasets usados (con link al portal oficial), advertencias sobre la calidad o cobertura del dato, y cuántas preguntas le quedan este mes al usuario. Descuenta 1 de sus preguntas del mes (10 gratis): si podés responder con `buscar_datasets` + `obtener_datos`, preferí esas.

Full history: https://api.protogrid.dev/v1/servers/org.openarg%2Fdatos-publicos/changes

## Remotes

- https://mcp.openarg.org/mcp (streamable-http, auth api_key ${DATOS_PUBLICOS_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (6)

- `agregar_datos`: Calcula en la base una suma, promedio, conteo, mínimo o máximo, opcionalmente agrupado.

Usala SIEMPRE que necesites un total, un promedio, un conteo, un mínimo/máximo o un
ranking, en vez de traer filas con `obtener_datos` y hacer la cuenta vos: es exacta,
no tiene el tope de 500 filas y gasta muchos menos tokens.
- `operacion`: "suma", "promedio", "conteo", "minimo" o "maximo".
- `columna`: la que se suma/promedia/etc. (nombres exactos de `describir_tabla`); no
  va con "conteo", que cuenta filas (si la mandás, da error). Las columnas de texto
  con números se leen según su formato (1.234,5 o 1,234.5); si el formato es
  ambiguo, no calcula y lo dice.
- `agrupar_por`: hasta 3 columnas, p. ej. ["jurisdiccion_desc"] para un ranking.
- `filtros`, `desde`, `hasta`, `columna_fecha`: como en `obtener_datos` (hasta 6 filtros).
- `ordenar_por`: "valor" (por defecto, para rankings) o una columna de `agrupar_por`
  (p. ej. el año, para una serie). `orden`: "desc" (por defecto) o "asc".
- `limite`: grupos a devolver, 1 a 200.
- `ponderar_por`: la columna de ponderación de una encuesta (con "conteo" da la
  población estimada, no la cantidad de filas de la muestra).
La respuesta dice sobre cuántas filas se calculó (`filas_usadas`, de todos los
grupos) y si hay más grupos que `limite`. Si ninguna fila cumple los filtros no hay
valor: dice qué valores existen. No descuenta preguntas.
- `buscar_datasets`: Busca en el catálogo de OpenArg (más de 30.000 datasets de portales oficiales).

Devuelve título, portal, descripción, link a la fuente oficial y las tablas
consultables de cada dataset (usalas con `describir_tabla` y `obtener_datos`).
`texto` es lo que buscás, en castellano ("tasas de interés BCRA", "matrícula
escolar CABA"). `portal` filtra por portal (ver `listar_fuentes`).
`limite` entre 1 y 25. No descuenta preguntas.
- `consultar_datos_publicos`: Responde una pregunta sobre datos públicos oficiales de Argentina, con fuentes.

Ejemplos: "¿Cuál fue la tasa de desempleo del último trimestre?",
"Evolución del IPC en 2025", "¿Cuántos diputados tiene cada bloque?",
"Presupuesto ejecutado por el Ministerio de Salud en 2024".
La respuesta incluye los datasets usados (con link al portal oficial),
advertencias sobre la calidad o cobertura del dato, y cuántas preguntas
le quedan este mes al usuario. Cada respuesta descuenta 1 de sus preguntas
del mes (10 gratis); un error, un corte por tiempo o la misma pregunta
repetida dentro de los 5 minutos no descuentan. Si podés responder con
`buscar_datasets` + `obtener_datos` o `agregar_datos`, preferí esas.
- `describir_tabla`: Muestra las columnas (con su tipo), cantidad de filas, período cubierto, frescura y una muestra de una tabla.

`tabla` es el nombre que devuelve `buscar_datasets`. Usalo antes de
`obtener_datos` o `agregar_datos` para saber qué columnas pedir y qué
fechas existen. La frescura dice cuándo leyó OpenArg la tabla de su fuente,
cuál es el último dato y, sólo si la tabla es una foto del período en curso,
su fecha de corte. La fecha de lectura no es la de los datos: una tabla de
un período pasado o sin columna de fecha no es vigente por haberse leído
hoy. No presentes como actual un dato viejo. No descuenta preguntas.
- `listar_fuentes`: Lista los portales de datos abiertos que cubre OpenArg y cuántos datasets tiene cada uno.

No descuenta preguntas: cuenta como un pedido del modo datos.
- `obtener_datos`: Trae filas de una tabla, en CSV, con la fuente oficial.

Para un total, promedio, conteo, mínimo, máximo o ranking NO traigas filas para
sumarlas: usá `agregar_datos`.
- `columnas`: las que quieras (por defecto, todas); nombres exactos de `describir_tabla`.
- `desde` / `hasta`: período, como AAAA, AAAA-MM o AAAA-MM-DD, sobre la columna de
  fecha (o de año).
- `filtros`: hasta 5. Igualdad: {"provincia": "Córdoba"}. Con operador, una lista:
  [{"columna": "monto", "operador": "mayor_que", "valor": "1000000"},
  {"columna": "provincia", "operador": "en", "valores": ["Salta", "Jujuy"]}].
  Operadores: =, !=, mayor_que, menor_que, >=, <=, contiene y en. La igualdad y
  `contiene` no distinguen mayúsculas ni acentos (en tablas de más de un millón de
  filas, sí: ahí la respuesta dice en `filtros_aplicados` qué se buscó tal cual).
- `orden`: "asc" (por defecto: primero lo más viejo) o "desc" (primero lo más
  reciente), por fecha. Para el último dato de una serie, pedí "desc".
- `limite`: 1 a 500 filas. Si hay más, la respuesta lo dice y da el `offset` de la
  página siguiente (hasta 10.000).
- `columna_fecha`: opcional, otra columna de fecha para `desde`/`hasta` y el orden.
Si ninguna fila cumple los filtros, la respuesta dice qué valores existen.
No descuenta preguntas.
