Skip to content

Commit 51d8fda

Browse files
authored
docs: reframe around the agent↔cloud-native-data bridge; add Vision + Roadmap (#170)
Reposition the docs from 'SQL access to geospatial data' to the project's role in the larger effort: the bridge that grounds coding agents in STAC metadata and confines them to validated cloud-native engines, runnable locally or on autoscaling k8s and drivable by small open models. - Reframe the home hero and feature cards - Add 'The bigger picture' (vision) page: the three-component ecosystem (data-workflows, mcp-data-server, jupyter-geoagent) and why a bridge - Add a forward-looking Roadmap page: array data via Zarr, hardware- accelerated engines (links the working mcp-gpu-data-server prototype and benchmark issue #42), broader domains, smaller open models - Fix license: MIT → BSD-3-Clause in README and site footer (matches #160)
1 parent 18a7d2e commit 51d8fda

5 files changed

Lines changed: 152 additions & 23 deletions

File tree

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
# MCP DuckDB Geospatial Data Server
1+
# MCP Data Server
22

3-
**[Documentation](https://boettiger-lab.github.io/mcp-data-server/)**
3+
**[Documentation](https://boettiger-lab.github.io/mcp-data-server/)** · **[The bigger picture](https://boettiger-lab.github.io/mcp-data-server/guide/vision)**
44

5-
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides SQL query access to large-scale geospatial datasets stored in S3. Built with DuckDB for high-performance analytics on H3-indexed environmental, biodiversity, and geospatial data.
5+
An open [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that connects AI agents to cloud-native data: it grounds the agent in [STAC](https://stacspec.org/) metadata so it finds the right dataset and reads its schema, and confines it to validated cloud-native engines so it queries terabyte-scale data over S3 without downloading it, misreading it, or silently failing at scale. Today it serves SQL over Parquet via DuckDB with H3 spatial indexing; see the [roadmap](https://boettiger-lab.github.io/mcp-data-server/guide/roadmap) for array (Zarr) and hardware-accelerated engines.
6+
7+
It is one of three open-source components — with [data-workflows](https://boettiger-lab.github.io/data-workflows/) (which produces the AI-ready data and metadata) and [jupyter-geoagent](https://jupyter-geoagent.readthedocs.io/) — that together make the cloud-native stack reachable by the AI tools researchers already use. Runs locally for sensitive data or on autoscaling Kubernetes for scale.
68

79
## Quick Start
810

@@ -314,7 +316,7 @@ Rather than maintaining a forked server deployment per app, private geo-agent ap
314316

315317
## License
316318

317-
MIT License - See repository for details
319+
BSD-3-Clause License — see [LICENSE](LICENSE).
318320

319321
## Contributing
320322

docs/.vitepress/config.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
export default {
22
title: 'MCP Data Server',
3-
description: 'MCP server providing SQL access to large-scale geospatial datasets via DuckDB and S3.',
3+
description: 'An open MCP server that connects AI agents to cloud-native data — grounding them in STAC metadata and validated query engines (DuckDB on S3).',
44
base: '/mcp-data-server/',
55

66
themeConfig: {
77
nav: [
88
{ text: 'Guide', link: '/guide/quickstart' },
99
{ text: 'Datasets', link: '/guide/datasets' },
10+
{ text: 'Vision', link: '/guide/vision' },
11+
{ text: 'Roadmap', link: '/guide/roadmap' },
1012
{ text: 'GitHub', link: 'https://github.com/boettiger-lab/mcp-data-server', target: '_blank' },
1113
],
1214

@@ -20,6 +22,13 @@ export default {
2022
{ text: 'Programmatic Access (R & Python)', link: '/guide/programmatic-access' },
2123
],
2224
},
25+
{
26+
text: 'About',
27+
items: [
28+
{ text: 'The bigger picture', link: '/guide/vision' },
29+
{ text: 'Roadmap', link: '/guide/roadmap' },
30+
],
31+
},
2332
{
2433
text: 'Operations',
2534
items: [
@@ -34,7 +43,7 @@ export default {
3443
],
3544

3645
footer: {
37-
message: 'Released under the MIT License.',
46+
message: 'Released under the BSD-3-Clause License.',
3847
},
3948

4049
search: {

docs/guide/roadmap.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Roadmap
2+
3+
This page describes where the project is heading. Items here are **directions, not
4+
commitments** — the [Quick Start](./quickstart) and [Architecture](./architecture) pages
5+
describe what the server does *today* (DuckDB SQL over Parquet on S3, H3 spatial indexing,
6+
STAC-driven discovery). The roadmap is the bridge from that proven core toward the broader
7+
[vision](./vision).
8+
9+
## Beyond tables: array data via Zarr
10+
11+
Today the server queries **tabular** cloud-native data (Parquet) through DuckDB. A growing
12+
share of science data is **array** data — gridded rasters, imaging stacks, multidimensional
13+
cubes — for which [Zarr](https://zarr.dev) and xarray are the cloud-native standard. We aim
14+
to extend the server so an agent can discover and query Zarr arrays through the same
15+
STAC-grounded interface it uses for tables, without leaving the cloud-native path.
16+
17+
This matters most for the **life sciences**, where spatially-resolved assays — spatial
18+
transcriptomics, whole-slide microscopy, 3D-genome imaging — are natively array-shaped and
19+
arrive at terabyte scale. Conventions like OME-Zarr and AnnData already point the way; the
20+
missing piece is the agentic layer that makes them reachable.
21+
22+
## Hardware-accelerated engines (Polars / GPU)
23+
24+
The server confines agents to **validated cloud-native engines**. DuckDB on CPU is the
25+
engine today. A working GPU-accelerated prototype —
26+
[`mcp-gpu-data-server`](https://github.com/boettiger-lab/mcp-gpu-data-server), built on
27+
Polars / cuDF with KvikIO for fast S3 reads and partition pruning — already exists and is
28+
being benchmarked head-to-head against this CPU server
29+
([tracked in issue #42](https://github.com/boettiger-lab/mcp-data-server/issues/42)).
30+
Early findings are nuanced: S3-I/O-bound queries favor CPU, while compute-heavy queries on
31+
already-loaded data favor GPU. The goal is to let an agent transparently use whichever
32+
engine fits the query, all behind the same MCP interface.
33+
34+
## Broader domains
35+
36+
The architecture is **domain-agnostic** — any data with a tabular or array structure and an
37+
indexable dimension fits the same pattern. Proven first at earth-observation scale, the
38+
work is being extended to the life sciences in collaboration with a lab that co-developed
39+
image-based spatial transcriptomics. As the [vision](./vision) describes, the aim is a
40+
single agentic interface to the cloud-native stack across scientific domains.
41+
42+
## Smaller, more open models
43+
44+
The server already injects all query guidance at call time, so compact open models can
45+
drive it. We are continuing to tune that guidance so increasingly small, locally-run open
46+
models can perform real analyses reliably — keeping sensitive data on local hardware and
47+
reducing dependence on closed models.
48+
49+
---
50+
51+
Have a use case that needs one of these sooner? Open an
52+
[issue](https://github.com/boettiger-lab/mcp-data-server/issues) — concrete use cases drive
53+
prioritization.

docs/guide/vision.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# The bigger picture
2+
3+
The MCP Data Server is one part of a larger open-source effort to make
4+
**terabyte-scale science data reachable by the AI tools researchers already use.**
5+
6+
## The problem
7+
8+
The open-source stack for large-scale data is mature and widely adopted: cloud-native
9+
serializations (Parquet, Zarr), out-of-core query engines (DuckDB, Polars),
10+
machine-readable metadata ([STAC](https://stacspec.org)), and object stores streamed by
11+
range-request instead of downloaded. Yet in practice it stays underused, for two reasons:
12+
13+
1. **Much data sits in legacy or proprietary formats** that lack the standardized
14+
metadata these tools — and AI agents — need to interpret it.
15+
2. **Coding agents reach for the wrong tools.** As assistants like Claude Code become the
16+
everyday interface for analysis, they default to the in-memory libraries most familiar
17+
to them (e.g. `pandas`), which silently fail at scale and, without metadata, misread the
18+
data. The mature stack sits idle not for lack of an audience, but because the agents that
19+
audience now turns to don't reach for it.
20+
21+
## Where this server fits
22+
23+
This server is the **link that lets a coding agent drive the cloud-native stack.** It does
24+
two things a raw database connection cannot:
25+
26+
- **Points the agent at STAC metadata**, so the model finds the right dataset and reads its
27+
schema before querying — instead of guessing column names and silently returning wrong
28+
answers.
29+
- **Exposes validated cloud-native engines** (DuckDB today; see the [roadmap](./roadmap))
30+
so the model uses out-of-core, streaming query paths instead of loading everything into
31+
memory.
32+
33+
It runs **locally** for sensitive data or on **autoscaling Kubernetes** for scale, and the
34+
query guidance is injected at call time so even **small, locally-run open models** can drive
35+
it — reducing dependence on closed models and keeping data on the researcher's hardware.
36+
37+
## The three components
38+
39+
| Component | Role |
40+
|---|---|
41+
| **[data-workflows](https://boettiger-lab.github.io/data-workflows/)** | Transforms disparate legacy and proprietary datasets into AI-ready, cloud-native formats (Parquet, Zarr) with rich STAC metadata. |
42+
| **mcp-data-server** (this project) | Connects coding agents to that AI-ready data — grounding them in the STAC metadata and confining them to validated cloud-native engines. |
43+
| **[jupyter-geoagent](https://jupyter-geoagent.readthedocs.io/)** | A JupyterLab extension integrating with Jupyter-AI — a data persona users drive with commercial *or* fully open models run locally. |
44+
45+
Each is independently useful; together they form an **AI-native bridge** to the
46+
cloud-native stack the sciences are converging on.
47+
48+
## Why a bridge, not a fork
49+
50+
The pieces this connects — Parquet, Zarr, DuckDB, Polars, STAC, Jupyter, and the
51+
[Model Context Protocol](https://modelcontextprotocol.io) — are individually mature
52+
open-source projects with wide adoption. What is new is the **AI-native layer** that lets
53+
researchers and their agents drive them *together*, at scale.
54+
55+
The leverage is that Jupyter and agentic coding assistants are already everyday tools, so
56+
the bridge meets that existing base without asking anyone to learn a new toolchain: the
57+
agent a scientist already uses makes the move from in-memory libraries to the cloud-native
58+
stack on the user's behalf.
59+
60+
These methods were built and proven at the largest **earth-observation** scales — working
61+
with partners including NASA, The Nature Conservancy, and California Fish & Wildlife. The
62+
same architecture is **general-purpose**, and is being extended to the **life sciences**,
63+
where spatially-resolved data (spatial transcriptomics, whole-slide microscopy,
64+
3D-genome imaging) now arrives at terabyte scale, beyond the in-memory tools most
65+
researchers rely on.

docs/index.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,30 @@ layout: home
33

44
hero:
55
name: MCP Data Server
6-
text: SQL access to geospatial data — for AI agents
7-
tagline: An MCP server that lets any LLM client query petabytes of H3-indexed environmental and biodiversity data via DuckDB and S3. No database setup required.
6+
text: The bridge between AI agents and cloud-native data
7+
tagline: An open Model Context Protocol server that grounds coding agents in STAC metadata and confines them to validated cloud-native engines — so any LLM client can query terabyte-scale data over S3 without downloading it, misreading it, or silently failing at scale.
88
actions:
99
- theme: brand
1010
text: Quick Start
1111
link: /guide/quickstart
12+
- theme: alt
13+
text: The bigger picture
14+
link: /guide/vision
1215
- theme: alt
1316
text: Browse Datasets
1417
link: /guide/datasets
15-
- theme: alt
16-
text: GitHub
17-
link: https://github.com/boettiger-lab/mcp-data-server
1818

1919
features:
20-
- title: Zero Configuration
21-
details: Point any MCP-compatible LLM client at the hosted endpoint. No database to install or configure.
22-
- title: DuckDB on S3
23-
details: Queries run directly against Parquet files in S3 using DuckDB — fast columnar analytics without moving data.
24-
- title: H3 Spatial Indexing
25-
details: All datasets use Uber's H3 hexagonal grid for efficient spatial joins and area calculations across resolutions.
26-
- title: Isolated Execution
27-
details: Each query runs in a fresh DuckDB instance. Credentials are request-scoped and never shared between clients.
28-
- title: STAC Catalog
29-
details: Datasets are discoverable through a standard STAC catalog. The agent browses and resolves S3 paths dynamically.
30-
- title: Private Data Ready
31-
details: Pass S3 credentials per-call to query private buckets alongside public data in the same query.
20+
- title: Grounded in STAC metadata
21+
details: The agent browses a standard STAC catalog to find the right dataset and read its column schema before writing a query — so it interprets the data correctly instead of guessing.
22+
- title: Validated cloud-native engines
23+
details: Queries run against Parquet on S3 with DuckDB — fast, out-of-core, columnar. The agent reaches for streaming engines instead of in-memory libraries that silently break at scale.
24+
- title: Runs local or at scale
25+
details: Run it on your own hardware for sensitive data, or on autoscaling Kubernetes for terabyte workloads. The same server, the same tools, either way.
26+
- title: Drivable by small open models
27+
details: The query guidance is injected at call time, so even compact, locally-run open models can drive the workflow — reducing dependence on closed models and keeping data on your hardware.
28+
- title: Private data ready
29+
details: Pass S3 credentials per call to query private buckets alongside public data. Credentials are request-scoped, never logged, and never shared between clients.
30+
- title: Part of a larger effort
31+
details: One of three open-source components — with data-workflows and jupyter-geoagent — that together make the cloud-native stack reachable by the AI tools researchers already use.
3232
---

0 commit comments

Comments
 (0)