Skip to content

Ellweb3/uruguay-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Bandera de Uruguay

πŸ‡ΊπŸ‡Ύ uruguay-mcp

Structured AI-agent access to Uruguay's open government data
Acceso estructurado de agentes de IA a los datos abiertos del Estado uruguayo

PyPI Python MCP CI Tests Coverage License

🌎 Español · English


An MCP server that gives AI agents structured access to Uruguay's open government data β€” the national data catalog, the Central Bank, the statistics institute, Montevideo's city data & realtime transport, spatial data (IDE), education, health, social programs, government social-security statistics (BPS), tax reference values (DGI), news, and the gub.uy service catalog β€” behind a single meta-discovery layer.

✨ Why a meta-discovery layer?

Instead of flooding the model with hundreds of tool definitions, the server exposes five meta-tools. The model searches for what it needs, then invokes the matching data tool by name. The prompt-visible surface stays constant no matter how many data sources are added.

Meta-tool Purpose
discover_tools(query, module?, limit?) Rank data tools relevant to a natural-language need (returns their argument schemas)
call_tool(name, arguments) Invoke a data tool by name (validates arguments)
list_modules() List data-source modules and their tool counts
plan_query(goal) Surface candidate tools for a multi-step goal
execute_batch(calls) Run several calls concurrently with per-call error isolation

Every tool returns a unified envelope: { "_meta": { source, cached, lang, timestamp }, "data": ... }.

At a glance: 5 meta-tools + 84 data tools across 17 modules, plus 54 prompts and 36 resources.

πŸ“š Data sources (modules)

Module Source Protocol Tools
πŸ›οΈ catalogodatos catalogodatos.gub.uy β€” national CKAN catalog (~2680 datasets, 72 orgs) + DataStore SQL CKAN REST 9
πŸ’΅ bcu Banco Central del Uruguay β€” exchange rates SOAP (zeep) 4
πŸ“Š ine Instituto Nacional de EstadΓ­stica β€” ANDA studies + national CKAN DataStore queries REST 7
🌐 gubuy gub.uy public API / service catalog CKAN REST 4
🚌 montevideo Intendencia de Montevideo β€” city CKAN + realtime transport CKAN + REST 11
πŸ—„οΈ datastore Cross-source SQLite workspace β€” load CSV/CKAN data, run read-only SQL JOINs local SQLite 4
πŸ›’ acce Agencia de Compras y Contrataciones del Estado β€” public procurement (OCDS) OCDS REST/RSS + CKAN 4
βš–οΈ impo IMPO β€” legislation, normativa & Diario Oficial REST (JSON) 6
🧾 dgi DGI (tax authority) β€” reference values (UI, IPC, ITP & late-payment rates) as .ods + statistical bulletins scrape + ODS/PDF 4
🌦️ inumet Instituto Uruguayo de MeteorologΓ­a β€” stations, forecast & alerts REST + HTML 3
πŸ›οΈ parlamento Parlamento del Uruguay β€” datasets, attendance & activity (CKAN-backed) CKAN REST 4
πŸ—ΊοΈ ide IDE Uruguay (AGESIC) β€” spatial data: WFS layers, cadastral parcels & geocoding WFS 2.0 + REST 5
πŸŽ“ educacion ANEP / education β€” datasets & school directories (national CKAN, org=anep) CKAN REST 3
πŸ₯ salud Salud (MSP / FNR) β€” health datasets, clinics & medication spending CKAN REST 5
🀝 mides MIDES β€” social programs & the GuΓ­a de Recursos service directory CKAN + HTML 4
πŸ§“ bps Banco de PrevisiΓ³n Social β€” "BPS en Cifras" observatory: pensions, benefits & contributors (live indicators) REST (JSON) 5
πŸ“° noticias gub.uy government news β€” latest releases & full-text search HTML scrape 2

The transport surface of montevideo needs OAuth2 credentials (URUGUAY_MCP_MVD_CLIENT_ID / URUGUAY_MCP_MVD_CLIENT_SECRET); without them the transport tools return a typed validation_error while the CKAN tools work unauthenticated.

🧩 Prompts & Resources

Each module also registers reusable prompts (parameterized Spanish instruction templates) and resources (static reference docs under the uru://<module>/<path> URI scheme), exposed natively through FastMCP.

  • 54 prompts β€” e.g. bcu_cotizacion_dolar_hoy, catalogo_buscar_por_tema, bps_pasividades_actuales, dgi_valor_referencia, ine_buscar_estudios, montevideo_proximo_bus, datastore_unir_dos_fuentes, acce_analizar_compra, impo_consultar_norma, inumet_clima_actual, ide_consultar_catastro, salud_consultar_medicamentos, noticias_ultimas.
  • 36 resources β€” e.g. uru://bcu/codigos-moneda, uru://bps/catalogo-indicadores, uru://dgi/catalogo-valores, uru://catalogodatos/guia-de-uso, uru://montevideo/credenciales-transporte, uru://acce/glosario-ocds, uru://impo/esquema, uru://inumet/variables, uru://ide/capas-destacadas, uru://salud/fuentes, uru://mides/guia-recursos.

See EXAMPLES.md for end-to-end usage scenarios, including cross-source ones via plan_query / execute_batch and SQL JOINs through the datastore module.

πŸš€ Quick start

# Run directly from PyPI (once published)
uvx uruguay-mcp

# …or install it
pip install uruguay-mcp        # or: uv pip install uruguay-mcp
uruguay-mcp

One-command install into Claude

uruguay-mcp install

Merges the server into Claude Desktop's config (preserving existing mcpServers and unrelated keys) and prints a ready-to-paste snippet for Claude Code / Cursor. Restart the client afterwards.

Claude Desktop config (manual)

{
  "mcpServers": {
    "uruguay-mcp": { "command": "uruguay-mcp" }
  }
}

Run options

uruguay-mcp                          # stdio (default)
uruguay-mcp --transport sse --port 8000
uruguay-mcp --modules catalogodatos,bcu   # load only some modules
uruguay-mcp --verbose                # INFO logs   (--debug for DEBUG)

βš™οΈ Configuration

All via URUGUAY_MCP_* environment variables:

Variable Default Meaning
URUGUAY_MCP_LANG es Language for human-facing strings (es/en)
URUGUAY_MCP_HTTP_TIMEOUT 30 HTTP timeout (seconds)
URUGUAY_MCP_CACHE_TTL 900 Response cache TTL (seconds)
URUGUAY_MCP_RATE_LIMIT_RPS 5 Max requests/sec per host
URUGUAY_MCP_MODULES (all) Comma-separated module allowlist
URUGUAY_MCP_MVD_CLIENT_ID (unset) OAuth2 client id for the Montevideo transport API
URUGUAY_MCP_MVD_CLIENT_SECRET (unset) OAuth2 client secret for the Montevideo transport API

πŸ—οΈ Architecture

src/uruguay_mcp/
β”œβ”€β”€ server.py            # FastMCP wiring; meta-tools + registered prompts + resources
β”œβ”€β”€ cli.py               # `uruguay-mcp` / `uruguay-mcp install`; -v/--debug logging
β”œβ”€β”€ meta/                # discovery layer
β”‚   β”œβ”€β”€ tools.py         # the 5 meta-tools
β”‚   └── search.py        # BM25-lite ranking over the registry
β”œβ”€β”€ shared/              # reused by every module
β”‚   β”œβ”€β”€ config.py        # env-driven settings (URUGUAY_MCP_*)
β”‚   β”œβ”€β”€ http.py          # async client: retries (tenacity) + per-host rate limit
β”‚   β”œβ”€β”€ cache.py         # async TTL cache
β”‚   β”œβ”€β”€ envelope.py      # unified {_meta, data} response (+ UTC timestamp)
β”‚   β”œβ”€β”€ i18n.py          # es/en messages
β”‚   β”œβ”€β”€ errors.py        # typed, localized errors
β”‚   └── registry.py      # tool/prompt/resource registry; @tool/@prompt/@resource
└── modules/             # one self-contained package per data source
    β”œβ”€β”€ catalogodatos/   β”œβ”€β”€ bcu/          β”œβ”€β”€ ine/
    β”œβ”€β”€ gubuy/           β”œβ”€β”€ montevideo/   β”œβ”€β”€ datastore/
    β”œβ”€β”€ acce/            β”œβ”€β”€ impo/         β”œβ”€β”€ inumet/
    β”œβ”€β”€ parlamento/      β”œβ”€β”€ ide/          β”œβ”€β”€ educacion/
    β”œβ”€β”€ salud/           β”œβ”€β”€ mides/        β”œβ”€β”€ noticias/
    β”œβ”€β”€ bps/             └── dgi/

Each module package is independent (constants Β· schemas Β· client Β· tools Β· optional prompts/resources). Importing the package self-registers everything it offers.

πŸ› οΈ Development

uv venv && uv pip install -e ".[dev]"

uv run pytest                  # 252 unit tests (HTTP mocked, offline) Β· 86% coverage
uv run pytest -m integration   # hits live government APIs
uv run ruff check src tests
uv run pyright

πŸ™Œ Acknowledgements

Built on data published by AGESIC, BCU, INE and the Intendencia de Montevideo under Uruguay's open-data law (NΒΊ 18.381). This project is an independent client and is not affiliated with those institutions.

πŸ“„ License

MIT

About

πŸ‡ΊπŸ‡Ύ MCP server for Uruguay's open government data β€” national catalog, BCU, INE, Montevideo & realtime transport, gub.uy. Meta-discovery layer over modular per-source tools.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages