argentina-mcp
MCP server exposing Argentine public jurisdiction/registry data (georef) and datasets under data/.
Requirements
Use as an MCP server
Run directly via npx — no local clone required:
npx argentina-mcp
Add it to Claude Code:
claude mcp add argentina-mcp -- npx -y argentina-mcp
Or add it to Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"argentina-mcp": {
"command": "npx",
"args": ["-y", "argentina-mcp"]
}
}
}
Data staleness: the datasets shipped inside the published npm package
are snapshots taken as of that version's publish date, not live/real-time
data. Some national datasets refresh on a repo cron — see
docs/refresh-automation.md — but the
installed npm package itself only updates when you install a newer
version. For fresher data than your installed version ships with, update
to a newer release, or clone the repo and run the sync:* scripts
yourself.
Licensing: this package's code is MIT-licensed (see
LICENSE). The datasets under data/ are not all
MIT — each dataset ships its own meta.json with a license field
reflecting its source portal's terms. See
docs/provincial-coverage.md for the
per-province license matrix.
Install
npm install
Build
npm run build
npm run typecheck
Sync the jurisdiction registry
Fetches provincias/departamentos/municipios from the pinned georef v2.1 API
(https://apis.datos.gob.ar/georef/api/v2.1/) and writes
data/registry/{provincias,departamentos,municipios,meta}.json plus the 24
data/provincial/<id>-<slug>/ directories and data/nacional/.
npm run sync:registry
This performs a real network call. Re-run it whenever the registry needs
refreshing (refresh_policy: "manual" in data/registry/meta.json).
Note: CABA's 15 comunas are stored only as departamentos (ids
02007-02105). The georef API has no municipio-level entries for CABA
(/municipios?provincia=02 returns zero results), so municipios.json
intentionally contains no CABA records. Verified registry totals:
provincias=24, departamentos=529, municipios=1210.
Sync national datasets
Each script performs a real network call and writes a raw snapshot plus its
meta.json under data/nacional/:
npm run sync:dolar
npm run sync:ckan
npm run sync:bcra
npm run sync:indec
smoke:bcra is a live TLS/connectivity check against the pinned BCRA v4.0
endpoint (no files written) — run it before shipping BCRA adapter changes:
npm run smoke:bcra
Automated dataset refresh
.github/workflows/refresh-datasets.yml runs sync:dolar/sync:bcra daily
and sync:indec monthly, opening a PR only when non-fetched_at data
actually changed — same CI-gated, human-merge-required flow as any other
PR. See docs/refresh-automation.md for the
DATA_REFRESH_PAT/repo-variable prerequisites, conventions, and failure
runbook.
Provincial coverage
See docs/provincial-coverage.md for the
per-province ingestion status matrix (integrated/conditional/deferred/etc.)
and the current integrated-province count.
Municipal coverage
npm run sync:municipal ingests three Wave 1 municipios (each isolated —
one municipio's failure never blocks the others):
| Ciudad de Mendoza (500007) | CKAN | acequias | CC-BY-4.0 |
| Bahía Blanca (060056) | CKAN | agua-potable | CC-BY-4.0 |
| Rosario (820210) | DKAN | presupuesto-2022-recursos-ejecutados | ODbL 1.0 |
Rosario is the first DKAN-backed municipio (src/adapters/dkan-client.ts);
CKAN and DKAN snapshots are both discoverable identically through
list_datasets/get_dataset — no MCP-layer distinction between portal
types.
Test
npm run test
npm run test:cov
Run the MCP server
node dist/server.js
Connects over stdio. Exposes:
- Tools:
search_jurisdiction, list_datasets, get_dataset
- Resources:
data://registry (the registry snapshot) and the
data://{level}/{id} template (datasets under data/nacional,
data/provincial, data/municipal)
Smoke test
Requires npm run build first.
npm run smoke
npx @modelcontextprotocol/inspector --cli node dist/server.js --method tools/list
Exercise a tool call manually:
npx @modelcontextprotocol/inspector --cli node dist/server.js \
--method tools/call --tool-name search_jurisdiction --tool-arg query=Neuquen