@server.tool()
async def tipo_cambio_usd(
tipo: str = "FIX",
fecha_inicio: str | None = None,
fecha_fin: str | None = None,
) -> str:
"""Tipo de cambio oficial USD/MXN."""
key = "TIPO_CAMBIO_LIQUIDACION" if tipo.upper() == "LIQUIDACION" else "TIPO_CAMBIO_FIX"
serie_info = SERIES[key]
data = await client.get_series_data(
serie_info["id"], fecha_inicio, fecha_fin
)
return json.dumps({
"indicador": serie_info["nombre"],
"serie_id": serie_info["id"],
})
@server.tool()
async def inflacion_mexico(tipo: str = "anual") -> str:
@server.tool()
async def valor_udis(fecha: str | None = None) -> str:
@server.tool()
async def reservas_internacionales() -> str:@server.tool()
async def tipo_cambio_usd(
tipo: str = "FIX",
fecha_inicio: str | None = None,
fecha_fin: str | None = None,
) -> str:
"""Tipo de cambio oficial USD/MXN."""
key = "TIPO_CAMBIO_LIQUIDACION" if tipo.upper() == "LIQUIDACION" else "TIPO_CAMBIO_FIX"
serie_info = SERIES[key]
data = await client.get_series_data(
serie_info["id"], fecha_inicio, fecha_fin
)
return json.dumps({
"indicador": serie_info["nombre"],
"serie_id": serie_info["id"],
})
@server.tool()
async def inflacion_mexico(tipo: str = "anual") -> str:
@server.tool()
async def valor_udis(fecha: str | None = None) -> str:
@server.tool()
async def reservas_internacionales() -> str:def pedir(id_serie, desde, hasta, token):
url = f"{API}/{id_serie}/datos/{desde}/{hasta}"
req = urllib.request.Request(
url, headers={"Bmx-Token": token}
)
with urllib.request.urlopen(req, timeout=60) as resp:
cuerpo = json.load(resp)
datos = cuerpo["bmx"]["series"][0].get("datos") or []
filas = []
for d in datos:
valor = d["dato"].replace(",", "")
if valor in ("N/E", ""):
continue
filas.append((d["fecha"], float(valor)))
return filas
for s in SERIES:
puntos = pedir(s["id"], desde, hoy, token)
escribir_csv(DIR_DATOS / f"{s['clave']}.csv", puntos)def pedir(id_serie, desde, hasta, token):
url = f"{API}/{id_serie}/datos/{desde}/{hasta}"
req = urllib.request.Request(
url, headers={"Bmx-Token": token}
)
with urllib.request.urlopen(req, timeout=60) as resp:
cuerpo = json.load(resp)
datos = cuerpo["bmx"]["series"][0].get("datos") or []
filas = []
for d in datos:
valor = d["dato"].replace(",", "")
if valor in ("N/E", ""):
continue
filas.append((d["fecha"], float(valor)))
return filas
for s in SERIES:
puntos = pedir(s["id"], desde, hoy, token)
escribir_csv(DIR_DATOS / f"{s['clave']}.csv", puntos)$ git fetch staging staging-testing
$ git rebase staging/staging-testing
$ make W=1 drivers/staging/rtl8723bs/
$ ./scripts/checkpatch.pl --strict 000*.patch
total: 0 errors, 0 warnings, 0 checks
$ git format-patch -2 --cover-letter
$ git send-email --to=gregkh@linuxfoundation.org \
--cc=linux-staging@lists.linux.dev 000*.patch
$ uv run pytest -q
$ uv build && uv publish
$ curl -s https://banxico-mcp.duckdns.org/mcp
$ systemctl --user status banxico-sincronizar
$ git log --oneline --author="Sobera"$ git fetch staging staging-testing
$ git rebase staging/staging-testing
$ make W=1 drivers/staging/rtl8723bs/
$ ./scripts/checkpatch.pl --strict 000*.patch
total: 0 errors, 0 warnings, 0 checks
$ git format-patch -2 --cover-letter
$ git send-email --to=gregkh@linuxfoundation.org \
--cc=linux-staging@lists.linux.dev 000*.patch
$ uv run pytest -q
$ uv build && uv publish
$ curl -s https://banxico-mcp.duckdns.org/mcp
$ systemctl --user status banxico-sincronizar
$ git log --oneline --author="Sobera"