Skip to content

Model Context Protocol server that packages GDAL-style geospatial workflows through Python-native libraries (Rasterio, GeoPandas, PyProj, etc.) to give AI agents catalog discovery, metadata intelligence, and raster/vector processing with built-in reasoning guidance and reference resources.

License

Notifications You must be signed in to change notification settings

Wayfinder-Foundry/gdal-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

GDAL MCP

Geospatial AI with epistemic reasoning

GDAL MCP is a Model Context Protocol (MCP) server that provides AI agents with geospatial analysis capabilities while requiring them to justify their methodological choices through a reflection middleware system.

πŸŽ‰ v1.1.1 Released (2025-10-26) β€” Vector tool parity + cross-domain reflection validated
🧠 Reflection System β€” Domain-based epistemic reasoning that transcends data types
⚑ 75% Cache Hit Rate β€” Methodology reasoning carries across raster ↔ vector operations

CI License: MIT Python 3.11+ FastMCP 2.0 PyPI Downloads


πŸ“š Documentation


🧠 The Reflection System

What Makes GDAL MCP Different?

Most AI tool systems execute operations immediately when requested. GDAL MCP requires the AI to justify methodological decisions before execution, creating a conversation about the "why" rather than just executing the "what."

Traditional AI tool approach:

User: "Reproject this DEM to Web Mercator"
AI: *silently executes operation*
Result: DEM reprojected (but with what resampling? why that CRS? what tradeoffs?)

GDAL MCP with reflection:

User: "Reproject this DEM to Web Mercator for my web map"
AI: *reflection middleware intercepts*
AI: "Before reprojecting to EPSG:3857, let me justify this CRS choice:
     
     Intent: Web Mercator preserves angles (conformal projection),
             essential for web tile rendering and navigation
     
     Alternatives considered:
     - EPSG:4326 (WGS84) β†’ rejected: not conformal, distorts shapes
     - Local UTM β†’ rejected: limited extent, not web-standard
     
     Tradeoffs: Area distortion increases at high latitudes
                (acceptable for web visualization)
     
     Confidence: High - this is the standard for web mapping"

*justification stored, operation proceeds*
Result: DEM reprojected with documented methodology

Why This Matters

1. Utilizes Full MCP Protocol Capabilities

The Model Context Protocol isn't just about tool executionβ€”it's about agentic reasoning and interaction. The reflection system leverages MCP's design to enable:

  • Pre-execution prompting (tool dependencies)
  • Structured reasoning (schema-validated justifications)
  • Stateful workflows (justification caching)
  • Human-in-the-loop interaction (advisory prompts)

2. Prevents Silent Failures

Geospatial operations can execute successfully while producing methodologically incorrect results:

  • Nearest-neighbor resampling on continuous elevation data (creates artifacts)
  • Web Mercator for area calculations (40%+ distortion possible)
  • Bilinear interpolation on categorical data (creates invalid class values)

The reflection system surfaces these choices for validation.

3. Educational, Not Restrictive

The AI isn't blocked from executing operationsβ€”it's required to demonstrate understanding:

  • First use: Explains reasoning, teaches methodology
  • Cached: Instant execution (knowledge persists)
  • Result: 75%+ cache hit rates, minimal friction

4. Creates Audit Trail

Every methodological decision is documented with:

  • Intent (what property must be preserved?)
  • Alternatives (what else was considered?)
  • Rationale (why this choice?)
  • Tradeoffs (what are the limitations?)
  • Confidence (high/medium/low)

This enables reproducible geospatial science.

🎯 Example Workflow

Multi-Operation Geospatial Analysis

User: "I need to reproject this DEM to UTM for accurate slope analysis,
       then reproject this vector layer to the same CRS for overlay"

AI Workflow:
1. Inspects DEM metadata (raster_info)
2. REFLECTION: Justifies UTM Zone 10N choice (accurate distance/area)
3. REFLECTION: Justifies cubic resampling (smooth gradients for derivatives)
4. Reprojects DEM (raster_reproject)
5. Inspects vector metadata (vector_info)
6. CACHE HIT: Reuses UTM justification (cross-domain!)
7. Reprojects vector (vector_reproject) - instant, no re-prompting
8. Both datasets now aligned in UTM Zone 10N

Result: 2 operations, 2 reflections (not 3!)
Cache hit rate: 50% β†’ Saves time, maintains methodology

The Key Innovation: The CRS justification from step 2 is reused in step 6 because the methodology (why UTM Zone 10N?) is domain-based, not tool-based. It doesn't matter if you're working with raster or vector dataβ€”the projection choice reasoning is the same.

See Tools Reference for detailed examples of all available tools.

⚑ Key Features

🧠 Reflection Middleware

  • Pre-execution reasoning for CRS selection, resampling methods
  • Structured justifications (intent, alternatives, choice, tradeoffs, confidence)
  • Persistent cache with 75% hit rates in multi-operation workflows
  • Cross-domain cache sharing - CRS justification works for both raster AND vector

πŸ› οΈ Comprehensive Toolset

  • Raster tools: info, convert, reproject, stats
  • Vector tools: info, reproject, convert, clip, buffer, simplify
  • See Tools Reference for complete documentation

πŸ›‘οΈ Production Quality

  • Full type safety (mypy strict mode)
  • 72 passing tests
  • Workspace security (path validation middleware)
  • Python-native (Rasterio/PyProj/pyogrio)
  • Real-time feedback via FastMCP Context API

πŸ“š MCP Resources

  • Workspace catalog for autonomous file discovery
  • Metadata intelligence for format detection
  • Reference knowledge base (CRS, resampling methods, compression options)

πŸ“¦ Quick Start

Install via uvx (Recommended)

# Run directly from PyPI
uvx --from gdal-mcp gdal --transport stdio

MCP Configuration (Claude Desktop)

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "gdal-mcp": {
      "command": "uvx",
      "args": ["--from", "gdal-mcp", "gdal", "--transport", "stdio"],
      "env": {
        "GDAL_MCP_WORKSPACES": "/path/to/your/geospatial/data"
      }
    }
  }
}

See QUICKSTART.md for:

  • Alternative installation methods (Docker, local development)
  • Detailed MCP client configuration
  • Workspace security setup
  • Troubleshooting guide

πŸ”§ Available Tools

GDAL MCP provides 12 production-ready tools across three categories:

Raster Operations

  • raster_info - Inspect metadata (CRS, resolution, bands, nodata)
  • raster_convert - Format conversion with compression & overviews (COG support)
  • raster_reproject ⚑ - CRS transformation (with reflection)
  • raster_stats - Statistical analysis with histograms

Vector Operations

  • vector_info - Inspect metadata (CRS, geometry, attributes)
  • vector_reproject ⚑ - CRS transformation (with reflection)
  • vector_convert - Format migration (SHP ↔ GPKG ↔ GeoJSON)
  • vector_clip - Spatial subsetting
  • vector_buffer - Proximity analysis
  • vector_simplify - Geometry simplification

Reflection System

  • store_justification - Cache epistemic reasoning (used internally)
  • Advisory prompts for CRS selection and resampling methods

⚑ = Reflection-enabled: These tools require methodological justification on first use, then cache for instant subsequent execution.

See TOOLS.md for complete documentation with examples and parameters.

πŸ§ͺ Testing

# Run all tests
uv run pytest test/ -v

# With coverage
uv run pytest test/ --cov=src --cov-report=term-missing

Status: βœ… 72 passing tests including reflection system integration

πŸ—οΈ Architecture

Python-Native Stack (ADR-0017):

  • Rasterio - Raster I/O and manipulation
  • PyProj - CRS operations and transformations
  • pyogrio - High-performance vector I/O (fiona fallback)
  • Shapely - Geometry operations
  • NumPy - Array operations and statistics
  • Pydantic - Type-safe models with JSON schema

Key Design Decisions (26 ADRs guide development):

  • ADR-0026: Reflection system and epistemic governance
  • ADR-0017: Python-native over CLI shelling for performance
  • ADR-0011: Explicit resampling required (prevents silent data corruption)
  • ADR-0022: Workspace isolation for security

🀝 Contributing

We welcome contributions! See CONTRIBUTING.md for:

  • Development setup
  • Code style guide (Ruff + mypy)
  • Testing requirements (pytest + fixtures)
  • ADR process

πŸ“ License

MIT License - see LICENSE for details.

πŸ™ Acknowledgments

πŸ—ΊοΈ Roadmap

Current Status: v1.1.1 - Phase 2 Complete βœ…

  • Reflection middleware operational
  • Vector/raster tool parity achieved
  • Cross-domain cache sharing validated (75% hit rates)

Next: Phase 3 - Workflow Intelligence (v2.0+)

  • Formal workflow composition
  • Multi-step orchestration
  • Analysis pattern libraries

See Vision for the complete long-term roadmap.


Built with ❀️ for the geospatial AI community

Geospatial operations that think, not just execute.

About

Model Context Protocol server that packages GDAL-style geospatial workflows through Python-native libraries (Rasterio, GeoPandas, PyProj, etc.) to give AI agents catalog discovery, metadata intelligence, and raster/vector processing with built-in reasoning guidance and reference resources.

Topics

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •