GeoNexus Reference Stack MVP
GeoNexus is an open, secure and inclusive federated geospatial intelligence infrastructure. It is not another Google Earth Engine, it is not a global data warehouse, and it is not a full GIS platform.
The core loop this MVP demonstrates:
GeoCard
↓
Registry / Discovery
↓
Contract validation
↓
GeoMCP
↓
Local GeoNode
↓
GeoSkill
↓
Result
What is GeoCard?
GeoCard is the machine-readable identity, capability and contract
description for a geospatial asset. It is inspired by Hugging Face Model
Cards, Data Cards, STAC metadata and ISO/TC 211 / OGC API concepts, but it is
specifically designed for AI-agent-readable geospatial assets (Data,
Model, Skill, Agent, Workflow, Knowledge, Compute). A GeoCard is validated
against the official JSON Schema in schemas/geocard.schema.json, and its
ContractValidator checks whether a card actually satisfies a request
(CRS, bbox, temporal window, bands, resolution).
What is GeoMCP?
GeoMCP is the geospatial interaction protocol of GeoNexus — an
MCP-compatible geospatial extension layer, implemented for the MVP as a
lightweight JSON-RPC 2.0 protocol (geo.capabilities, geo.describe,
geo.execute, geo.health) with an HTTP transport (FastAPI) and a Python
client. It leaves room for an official MCP adapter later; it does not try to
recreate the entire MCP ecosystem.
What is GeoNode?
GeoNode is a sovereign cloud-native geospatial capability node. The Local
GeoNode runs on your machine and provides a GeoCard registry, a Skill
registry, a GeoMCP server, a local execution runtime and a health endpoint.
The architecture deliberately keeps GeoMCP and GeoCard transport/contract
agnostic so that GeoNode Federation can be added later without rewriting
them — and the V0.3 federation layer is already included: a shared
GeoCard Registry for discovery plus pushdown execution that routes
requests to the node owning the data (geonexus demo federated).
How they relate
- A GeoCard describes a geospatial asset and its executable contract.
- Discovery / Contract validation decides whether the asset satisfies a request.
- GeoMCP carries the request to the node that owns the asset.
- The GeoNode executes the request locally.
- A GeoSkill is the reusable capability that performs the computation.
- The Result (e.g. an NDVI raster + statistics) returns to the caller.
Data sovereignty is fundamental: data stays where it is, computation moves to the data. GeoAgent will later become the orchestration layer.
Quick start
cd /Users/mac/Repos/GeoNexus/mvp
python3.12 -m venv .venv
.venv/bin/pip install -e ".[dev]"
# Validate the demo card
.venv/bin/geonexus card validate examples/amazon_ndvi/geocard.yaml
# Run the whole Amazon NDVI demo (synthetic data)
.venv/bin/geonexus demo amazon-ndvi
# Run the federated demo (registry + data node + pushdown execution)
.venv/bin/geonexus demo federated
# Run the real-data demo (REAL Sentinel-2 NDVI via Planetary Computer STAC;
# needs network access; degrades gracefully when real pixels are blocked)
.venv/bin/geonexus demo stac-real
# Run the GeoAgent demo (V1.0: 3-step pipeline DAG + pushdown execution)
.venv/bin/geonexus demo agent
# Natural-language goal via an OpenAI-compatible LLM (needs GEONEXUS_LLM_API_KEY)
# .venv/bin/geonexus agent ask "分析亚马逊雨林 2015 与 2025 的植被变化"
# Run the MCP bridges (GeoMCP over Model Context Protocol)
.venv/bin/geonexus mcp run --bare # stdio (local AI assistants)
.venv/bin/geonexus mcp serve --port 9000 # Streamable HTTP (remote clients)
# Persistent + authenticated registry (V1.0)
.venv/bin/geonexus registry start --persist registry.json --api-key topsecret
# Import real OGC API assets as GeoCards (standards interop, V1.0)
.venv/bin/geonexus card import-ogc https://demo.pygeoapi.io/master --collection lakes
# OGC write-side bridge: geo.execute drives a real OGC API - Processes process
.venv/bin/geonexus demo ogc-process --remote https://demo.pygeoapi.io/master --process hello-world
# OGC Coverages: raster retrieval (CoverageJSON -> NDVI -> GeoTIFF, offline mock)
.venv/bin/geonexus demo ogc-coverage
# GeoAgent pipeline mixing local skills + remote OGC process skills
.venv/bin/geonexus demo ogc-pipeline
# GeoNode-to-GeoNode federation: relay delegation + health-aware routing
.venv/bin/geonexus demo federation-deep
# Registry federation + GGIHS: cross-registry catalog/health aggregation
.venv/bin/geonexus demo ggihs
# STAC write side: publish GeoCards as STAC Items (round trip)
.venv/bin/geonexus demo stac-write
# Run the tests
.venv/bin/pytest
See docs/QUICKSTART.md for the full 10-minute walkthrough, including
starting a live node and calling it with curl.
Repository layout
mvp/
├── schemas/geocard.schema.json # Official GeoCard JSON Schema (draft 2020-12)
├── src/geonexus/
│ ├── geocard/ # model, builder, loader, validator (contract)
│ ├── geomcp/ # protocol, models, server, client
│ ├── geonode/ # node, registry, runtime, skill
│ ├── registry/ # shared Registry: cards+skills, persistence+auth
│ ├── federation/ # pushdown execution (V0.3)
│ ├── agent/ # GeoAgent: planner + pipeline DAG + LLM translator
│ ├── adapters/ # STAC + OGC API read/write adapters (V0.4/V1.0)
│ ├── mcp_adapter.py # official MCP SDK bridge: stdio + HTTP (V0.5/V1.0)
│ └── cli.py # `geonexus` command line interface
├── examples/
│ ├── local_node.py # minimal embedded node example
│ ├── amazon_ndvi/ # end-to-end NDVI demo (synthetic data)
│ ├── federated/ # registry + data node + pushdown demo
│ ├── federation_deep/ # node delegation + health-aware routing (V1.0+)
│ ├── ggihs/ # cross-registry health/catalog aggregation (V1.0+)
│ ├── stac_real/ # real Sentinel-2 NDVI demo (V0.4)
│ ├── stac_write/ # GeoCard -> STAC Item round trip (V1.0+)
│ ├── agent/ # pipeline DAG demo (V1.0)
│ ├── ogc_process/ # OGC write-side bridge demo (V1.0)
│ ├── ogc_coverage/ # OGC Coverages raster demo (V1.0)
│ └── ogc_pipeline/ # OGC skills in GeoAgent pipelines (V1.0)
├── tests/ # pytest suite
└── docs/ # architecture & component documentation
Documentation
docs/ARCHITECTURE.md— why GeoNexus is federated, why data stays at sovereign nodes, relationship with MCP / OGC API / STAC, "move computation to data".docs/GEOCARD.md— full GeoCard field specification.docs/GEOMCP.md— JSON-RPC structure, methods, geospatial context, execution model.docs/GEONODE.md— Local GeoNode, future federation, node asset types.docs/FEDERATION.md— the shared registry + pushdown + delegation + registry federation.docs/GGIHS.md— cross-registry health/catalog aggregation (V1.0+).docs/AGENT.md— the GeoAgent planner: DAG pipelines + LLM goal translation.docs/MCP.md— the official MCP SDK bridge (stdio + Streamable HTTP).docs/OGC.md— the OGC API Features/Processes adapter (standards interop).docs/STAC.md— the STAC adapter: read (import) + write (export) sides.docs/API.md— Python SDK public API reference.docs/API_STABILITY.md— frozen public API + deprecation policy (v1.0).docs/RELEASE.md— release process checklist.docs/QUICKSTART.md— run the entire demo in less than 10 minutes.docs/MVP_IMPLEMENTATION.md— what was built, acceptance checks, limitations.CHANGELOG.md— release history.
License
Apache License 2.0. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geonexus_sdk-1.0.0.tar.gz.
File metadata
- Download URL: geonexus_sdk-1.0.0.tar.gz
- Upload date:
- Size: 107.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e22d8df7545cc36da447d6272bf4bcc3c362bc23c12f30269b19b3fb005d76e
|
|
| MD5 |
b891334e008c2324bf12b2b8bbf4bf28
|
|
| BLAKE2b-256 |
0f8625566bd5d3e51fd9a0cc355e5dcbfee5d20b78c5649c2252c58a3ead7bda
|
File details
Details for the file geonexus_sdk-1.0.0-py3-none-any.whl.
File metadata
- Download URL: geonexus_sdk-1.0.0-py3-none-any.whl
- Upload date:
- Size: 95.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be9032fa14f045ce33ab9abf757272d3a33a37a1a75997b4845fea34b2beddb7
|
|
| MD5 |
6490211aa32b3f7979c355748cf01417
|
|
| BLAKE2b-256 |
93d44ec7448f85de0a5dbcd2248c4c875c9a41bb0258403d2054df538c658387
|