Saltar a contenido

Servidor MCP (para agentes)

chile-hub incluye un servidor MCP (Model Context Protocol) de sólo lectura para que agentes de código —Claude Desktop/Code, Cursor, VS Code— consulten los datasets sin escribir Python. Corre local por stdio: sin hosting, sin API propia, sin telemetría y sin descargar el bundle (lee los Parquet de la capa HTTP estática).

Instalación

pip install "chile-hub[mcp]"
chile-hub-mcp

O sin instalar nada permanente, vía uvx:

uvx --from "chile-hub[mcp]" chile-hub-mcp

El servidor vive en el extra opcional mcp (mcp>=2.2): el paquete base chile-hub no trae sus dependencias, así que instala/ejecuta siempre con el extra (chile-hub[mcp] / --from "chile-hub[mcp]"). Sin él, el comando chile-hub-mcp falla al importar mcp.

Configuración

Claude Desktop (claude_desktop_config.json) y clientes compatibles:

{
  "mcpServers": {
    "chile-hub": {
      "command": "uvx",
      "args": ["--from", "chile-hub[mcp]", "chile-hub-mcp"]
    }
  }
}

Tools

Tool Qué hace Parámetros
list_datasets Lista las capas disponibles y la URL de su Parquet; un alias (p. ej. comunas_enriquecidas) apunta al Parquet de su capa canónica e indica alias_de —
describe_dataset Columnas y tipos, filas, claves de cruce, fuente, licencia y frescura de una capa nombre
get_dataset Primeras filas de una capa (máximo 1000) nombre, limite
resolve_comunas Nombres de comuna → código CUT de 5 caracteres nombres (lista)
resolve_regiones Nombres de región (o alias como RM) → código CUT de 2 caracteres nombres (lista)
resolve_by_coords Coordenadas [[lat, lon], ...] → comuna (requiere extra geo) puntos (lista de pares)
get_indicadores Serie UF/dólar/euro/UTM/IPC codigo, desde, hasta, limite

Ejemplos de uso por el agente:

  • resolve_comunas(["Ñuñoa", "valparaiso"]) → 13120, 05101
  • resolve_regiones(["Valparaiso", "RM"]) → 05, 13
  • resolve_by_coords([[-33.4489, -70.6693]]) → comuna de Santiago (requiere pip install "chile-hub[geo]")
  • get_indicadores(codigo="uf", desde="2026-01-01")
  • describe_dataset(nombre="censo_comunal") → columnas, 346 filas, licencia CC BY 4.0, frescura
  • get_dataset(nombre="censo_comunal", limite=5)

Los tres resolvers son de coincidencia exacta y determinista (toleran tildes/ñ/mayúsculas y alias como RM, nada más): lo no encontrado devuelve matched: false, nunca una excepción ni un guess. No corrijas typos por tu cuenta — un nombre mal escrito queda como no-matcheado.

El servidor es de sólo lectura por diseño. Para SQL arbitrario usa la API Python (ChileHub.sql()) o DuckDB sobre los Parquet (ver Acceso HTTP estático).

Registry oficial MCP

El repositorio incluye server.json en la raíz para el registry oficial (preview), con:

  • name: io.github.cortega26/chile-hub (namespace verificado vía GitHub),
  • packages[0]: registryType: "pypi", identifier: "chile-hub", transport: "stdio".

Verificación de propiedad (PyPI): el registry comprueba el namespace contra GitHub y exige el marcador mcp-name: io.github.cortega26/chile-hub en el README del paquete publicado en PyPI. Ese marcador vive en README.md (que es la descripción en PyPI), así que hay que publicar después del primer release que lo incluya.

Runtime: el registry instala chile-hub sin el extra [mcp]; server.json no expresa extras de PyPI. Para levantar el servidor hay que instalar o ejecutar con el extra (ver Instalación):

pip install "chile-hub[mcp]"                                  # o
uvx --from "chile-hub[mcp]" chile-hub-mcp

Un paquete-alias chile-hub-mcp que declare el extra queda como follow-up si el registry llega a exigir un entrypoint ejecutable para publicar.

Publicación (operador)

# 1. Instalar mcp-publisher (Homebrew o el binario del release oficial)
brew install mcp-publisher

# 2. Autenticarse con OAuth de GitHub (namespace io.github.cortega26/*)
mcp-publisher login github

# 3. Validar server.json sin publicar (también: POST público a /v0.1/validate)
mcp-publisher validate

# 4. Publicar
mcp-publisher publish

Verificación posterior:

curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.cortega26/chile-hub"

server.json fija version al release vigente: revalidar en cada release que no quede stale respecto de pyproject.toml.