Skip to main content
Glama

aicesat — altimetría entre misiones

Un servidor MCP para Claude Desktop que obtiene fotones reales de ICESat-2 ATL03 y disparos de ICESat/GLAS GLAH06 sobre un área elegida, los representa como una nube de puntos 3D (deck.gl) y, mediante un conmutador, aplica un corregistro ITRF2014 + época (movimiento de placas, ITRF2014-PMM / NOAM) con pyproj, actualizando las estadísticas de Δh colocalizadas. Surgió a partir de docs/cross-mission-altimetry-mcp-spec.md, que contiene el diseño completo y la justificación.

El corregistro elimina el movimiento de placas entre épocas. No elimina el flujo de hielo, el GIA, el geoide/marea, la compactación del firn ni el datum vertical, y el widget lo indica en cada respuesta. Las alturas de GLAS se convierten de TOPEX/Poseidon → elipsoide WGS84 mediante d_deltaEllip del producto, con la corrección de saturación d_satElevCorr aplicada; eso queda registrado en cada bloque de comparabilidad.

Configuración

uv sync          # Python 3.13
uv run pytest    # offline unit tests

Inicio de sesión de Earthdata: se lee un token de portador de ~/.edl/token.prod (se puede sustituir con AICESAT_EDL_FILE o definir EARTHDATA_TOKEN). El servidor nunca escribe en stdout (transporte MCP stdio); los registros van a stderr.

Related MCP server: pointcloud-mcp

Claude Desktop

Añade a ~/Library/Application Support/Claude/claude_desktop_config.json, usando la ruta absoluta a tu clon del repositorio:

{
  "mcpServers": {
    "aicesat": {
      "command": "/opt/homebrew/bin/uv",
      "args": ["--directory", "/ABSOLUTE/PATH/TO/aicesat", "run", "aicesat-server"]
    }
  }
}

Reinicia Claude Desktop. La interfaz unificada se muestra en línea como una aplicación MCP; el servidor también la sirve en http://127.0.0.1:8765/ (puerto mediante AICESAT_PORT) para usarla en un navegador.

Herramientas: open_ui, list_regions, list_scenes, check_coverage, show_photons (región, bbox o polígono), add_glas, coregister, lake_status, lake_load_cells, job_status.

UI

Una página autocontenida (construida a partir de src/aicesat/ui/* + deck.gl / h3-js incluidos por scripts/build_ui.py, Python puro; el servidor la reconstruye al iniciarse cuando cambian las fuentes), servida tanto en línea en Claude Desktop como en /:

  • Explore — un globo terráqueo 3D (mapa base Natural Earth, sin proyección plana). Navega a cualquier lugar, dibuja un cuadro o polígono, comprueba la cobertura y crea una escena como trabajo en segundo plano; las huellas de las escenas y las celdas H3 cargadas se muestran en el globo.

  • Lake — el almacén Parquet persistente como cuadrícula H3: estadísticas por celda al pasar el cursor, un límite de almacenamiento que expulsa automáticamente las celdas usadas menos recientemente y la carga o expulsión en segundo plano de celdas seleccionadas.

  • Scene — el visor 3D: puntos de ICESat-2 y GLAS superpuestos sobre un DEM, un panel Adjustments de conmutadores de corrección y los histogramas de Δh colocalizados. El desplazamiento real del movimiento de placas es subpíxel a la escala de la escena, por lo que las nubes no se mueven visiblemente: el efecto se lee en el panel de Δh, no en un visual exagerado. Los paneles se contraen y se cierran.

La interfaz se comunica con una API independiente del transporte (api.py) expuesta de dos maneras: las rutas /api/* de localhost para el navegador y las herramientas MCP visibility:["app"] que el host utiliza como proxy para la aplicación integrada. scripts/e2e_apps.py comprueba el cableado MCP-App.

Arquitectura

La ruta ATL03 no abre HDF5 en el momento de la consulta. Por cada gránulo, una construcción de índice (index.py) registra el rango de bytes de cada fragmento, la canalización de filtros y las celdas H3 que toca. Las consultas resuelven un bbox/polígono a celdas, obtienen solo los fragmentos necesarios mediante solicitudes de rango por HTTPS (token de portador EDL → URL prefirmada), los decodifican sin una biblioteca HDF5 y materializan los fotones en un almacén Parquet particionado por Hive (lake.py) con procedencia por fila y coordenadas corregistradas. DuckDB responde sobre el almacén (api.py); una tabla de cobertura registra lo materializado para que las consultas repetidas no obtengan nada. La ruta anterior earthaccess.open + h5py se conserva como atl03.extract_legacy para comparación. scripts/bench_access.py compara los métodos de acceso; véase la especificación (Apéndice C) para el enfoque.

La geometría de la escena tiene en cuenta la latitud (scene.frame_crs): proyección estereográfica polar cerca de los polos y una proyección acimutal equidistante por escena en el resto, de modo que las escenas se renderizan en cualquier lugar de la Tierra.

DEM e imágenes

La superficie de la escena es un DEM real elegido por región, siempre en alturas del elipsoide WGS84 (la misma referencia vertical que ATL03), leído por ventanas mediante /vsicurl/ y almacenado en caché: ArcticDEM v4.1 (Ártico, EPSG:3413) y REMA v2.0 (Antártico, EPSG:3031) — ambos ya elipsoidales — y Copernicus GLO-30 en el resto, cuyas alturas ortométricas EGM2008 se convierten a elipsoidales añadiendo la ondulación del geoide NGA egm08 (h = H + N). No hay respaldo por interpolación de fotones: una escena muestra un DEM únicamente donde hay un DEM que la cubre. Las imágenes de la escena son Sentinel-2 cloudless (EOX, CC BY-NC-SA 4.0), superpuestas sobre la superficie. El mapa base del globo de Explore/Lake es la capa de tierra de Natural Earth 50 m (dominio público). Los créditos aparecen en pantalla.

Scripts

uv run scripts/check_coverage.py --region egig_west_flank   # granule counts by month / laser campaign
uv run scripts/ingest.py egig_west_flank                    # index + byte-range ingest + lake query
uv run scripts/build_index.py --region egig_west_flank      # offline index pre-build (amortized off the query path)
uv run scripts/make_scene.py egig_west_flank --glas --coreg # full pipeline for a region
uv run scripts/serve.py                                     # widget server only, for local testing
uv run scripts/bench_access.py                              # access-method comparison

Los datos (data/) están ignorados por git; elimínalos para forzar una nueva descarga.

Cómo se mide Δh

Para cada disparo de GLAS, la altura de la superficie de ICESat-2 en el centro de la huella proviene de un ajuste lineal local a lo largo de la traza de los fotones de señal dentro del radio de colocalización. Una mediana de disco es un estadístico de orden y no puede resolver el efecto de pendiente subcentimétrico; el ajuste es continuo en la posición, por lo que sí puede. Solo la componente a lo largo del haz del desplazamiento por movimiento de placas es observable en un único haz, y el panel de artefactos por par mantiene separada la parte vertical milimétrica del salto de marco del efecto de pendiente. Cada respuesta lleva la lista unresolved y afirma "movimiento de placas aplicado", nunca "las misiones coinciden".

Install Server
F
license - not found
C
quality
B
maintenance

Maintenance

Maintainers
<1hResponse time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • OpenTopography global DEM rasters + point queries (free key)

  • Open Topo Data — global elevation lookups (multiple DEM datasets)

  • Measured ground motion per US address (NASA InSAR). Self-register, $0.40/report, misses free.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/eigenbeam/aicesat'

If you have feedback or need assistance with the MCP directory API, please join our Discord server