Skip to main content
Glama
README.mdβ€’11.1 kB
# πŸ›°οΈ GeoSight MCP Server [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![MCP](https://img.shields.io/badge/MCP-Compatible-green.svg)](https://modelcontextprotocol.io/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) **Production-ready Satellite Imagery Analysis MCP Server** - Analyze Earth observation data through natural language queries. > *"Show me deforestation in the Amazon over the last year"* > *"Detect flooding in Bangladesh from satellite imagery"* > *"Track urban expansion around Mumbai since 2020"* --- ## 🌟 Features | Feature | Description | |---------|-------------| | **Land Cover Classification** | Identify forests, water, urban areas, agriculture | | **Vegetation Analysis (NDVI)** | Monitor crop health, deforestation, drought | | **Water Detection (NDWI)** | Track floods, reservoirs, coastal changes | | **Change Detection** | Compare imagery across time periods | | **Object Detection** | Find ships, planes, buildings, solar farms | | **Automated Reports** | Generate PDF/HTML reports with maps | --- ## πŸ—οΈ Architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CLIENT LAYER β”‚ β”‚ Claude Desktop / Streamlit Dashboard / API β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ MCP Protocol (stdio/SSE) β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MCP SERVER (FastAPI) β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Tools β”‚ β”‚ Auth β”‚ β”‚ Queue β”‚ β”‚ β”‚ β”‚ Router β”‚ β”‚ Layer β”‚ β”‚ (Celery) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PROCESSING ENGINE β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Imagery β”‚ β”‚ ML Models β”‚ β”‚ Visualize β”‚ β”‚ β”‚ β”‚ Fetcher β”‚ β”‚ Pipeline β”‚ β”‚ Engine β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ DATA LAYER β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Postgres β”‚ β”‚ Redis β”‚ β”‚ MinIO β”‚ β”‚ β”‚ β”‚ +PostGIS β”‚ β”‚ Cache β”‚ β”‚ Storage β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## πŸš€ Quick Start ### Prerequisites - Python 3.11+ - Docker & Docker Compose - Sentinel Hub Account (free tier available) ### 1. Clone & Setup ```bash git clone https://github.com/yourusername/geosight-mcp.git cd geosight-mcp # Create virtual environment python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # Install dependencies pip install -e ".[dev]" ``` ### 2. Configure Environment ```bash cp .env.example .env # Edit .env with your API keys ``` ### 3. Start Services ```bash # Development mode docker-compose up -d redis postgres minio # Run MCP server python -m geosight.server # Or run everything with Docker docker-compose up -d ``` ### 4. Connect to Claude Desktop Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json`): ```json { "mcpServers": { "geosight": { "command": "python", "args": ["-m", "geosight.server"], "cwd": "/path/to/geosight-mcp", "env": { "SENTINEL_HUB_CLIENT_ID": "your-client-id", "SENTINEL_HUB_CLIENT_SECRET": "your-client-secret" } } } } ``` --- ## πŸ”§ Available MCP Tools ### `search_imagery` Find available satellite imagery for a location and date range. ```python # Example usage through Claude "Find Sentinel-2 imagery for New Delhi from last month" ``` ### `calculate_ndvi` Calculate vegetation index to assess plant health. ```python # Returns: NDVI map + statistics "Calculate NDVI for agricultural region near Punjab" ``` ### `calculate_ndwi` Calculate water index to detect water bodies and flooding. ```python # Returns: Water mask + area calculations "Show water bodies in Kerala during monsoon season" ``` ### `detect_land_cover` Classify land into categories: forest, water, urban, agriculture, barren. ```python # Returns: Classification map + percentages "Classify land cover for Bangalore metropolitan area" ``` ### `detect_changes` Compare two time periods and highlight differences. ```python # Returns: Change map + statistics "Show construction changes in Dubai between 2020 and 2024" ``` ### `detect_objects` Find specific objects in imagery (ships, planes, buildings). ```python # Returns: Detected objects with bounding boxes "Detect ships in Mumbai harbor" ``` ### `generate_report` Create comprehensive PDF/HTML report with analysis. ```python # Returns: Downloadable report "Generate environmental report for Amazon rainforest region" ``` --- ## πŸ“Š Data Sources | Source | Type | Resolution | Frequency | Cost | |--------|------|------------|-----------|------| | Sentinel-2 | Optical (13 bands) | 10m | 5 days | Free | | Sentinel-1 | SAR (radar) | 10m | 6 days | Free | | Landsat 8/9 | Optical + Thermal | 30m | 16 days | Free | | MODIS | Global coverage | 250m-1km | Daily | Free | --- ## 🧠 ML Models ### Pre-trained Models Included 1. **Land Cover Classifier** - EuroSAT-based CNN (ResNet50) 2. **Change Detection** - Siamese U-Net architecture 3. **Object Detection** - YOLOv8 trained on DOTA dataset 4. **Segmentation** - DeepLabV3+ for semantic segmentation ### Model Performance | Model | Task | Accuracy | Inference Time | |-------|------|----------|----------------| | Land Cover | Classification | 94.2% | ~200ms | | Change Detection | Binary change | 91.8% | ~500ms | | Object Detection | Ships/Planes | 87.5% mAP | ~300ms | --- ## 🐳 Deployment ### Docker Deployment ```bash # Build and run all services docker-compose -f docker-compose.prod.yml up -d # Check logs docker-compose logs -f geosight-mcp ``` ### Cloud Deployment (Railway/Fly.io) ```bash # Railway railway up # Fly.io fly launch fly deploy ``` ### Kubernetes ```bash kubectl apply -f k8s/ ``` --- ## πŸ“ Project Structure ``` geosight-mcp/ β”œβ”€β”€ src/ β”‚ └── geosight/ β”‚ β”œβ”€β”€ __init__.py β”‚ β”œβ”€β”€ server.py # MCP server entry point β”‚ β”œβ”€β”€ tools/ # MCP tool implementations β”‚ β”‚ β”œβ”€β”€ __init__.py β”‚ β”‚ β”œβ”€β”€ imagery.py # Image search & fetch β”‚ β”‚ β”œβ”€β”€ indices.py # NDVI, NDWI calculations β”‚ β”‚ β”œβ”€β”€ classification.py # Land cover classification β”‚ β”‚ β”œβ”€β”€ change_detection.py β”‚ β”‚ β”œβ”€β”€ object_detection.py β”‚ β”‚ └── reports.py # Report generation β”‚ β”œβ”€β”€ models/ # ML models β”‚ β”‚ β”œβ”€β”€ __init__.py β”‚ β”‚ β”œβ”€β”€ land_cover.py β”‚ β”‚ β”œβ”€β”€ change_detector.py β”‚ β”‚ └── object_detector.py β”‚ β”œβ”€β”€ services/ # External service integrations β”‚ β”‚ β”œβ”€β”€ __init__.py β”‚ β”‚ β”œβ”€β”€ sentinel_hub.py β”‚ β”‚ β”œβ”€β”€ earth_engine.py β”‚ β”‚ └── storage.py β”‚ └── utils/ # Utilities β”‚ β”œβ”€β”€ __init__.py β”‚ β”œβ”€β”€ geo.py # Geospatial utilities β”‚ β”œβ”€β”€ visualization.py β”‚ └── cache.py β”œβ”€β”€ tests/ β”œβ”€β”€ config/ β”œβ”€β”€ scripts/ β”œβ”€β”€ dashboard/ # Streamlit dashboard β”œβ”€β”€ docs/ β”œβ”€β”€ docker-compose.yml β”œβ”€β”€ Dockerfile β”œβ”€β”€ pyproject.toml └── README.md ``` --- ## πŸ§ͺ Testing ```bash # Run all tests pytest # With coverage pytest --cov=geosight --cov-report=html # Integration tests pytest tests/integration/ -v ``` --- ## πŸ“ˆ Monitoring - **Prometheus metrics** at `/metrics` - **Health check** at `/health` - **Grafana dashboards** included in `config/grafana/` --- ## 🀝 Contributing 1. Fork the repository 2. Create feature branch (`git checkout -b feature/amazing-feature`) 3. Commit changes (`git commit -m 'Add amazing feature'`) 4. Push to branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request --- ## πŸ“„ License MIT License - see [LICENSE](LICENSE) for details. --- ## πŸ™ Acknowledgments - [Sentinel Hub](https://www.sentinel-hub.com/) for satellite data access - [EuroSAT](https://github.com/phelber/eurosat) for land cover dataset - [DOTA](https://captain-whu.github.io/DOTA/) for object detection dataset --- ## πŸ“¬ Contact **Your Name** - [@yourtwitter](https://twitter.com/yourtwitter) Project Link: [https://github.com/yourusername/geosight-mcp](https://github.com/yourusername/geosight-mcp)

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/armaasinghn/geosight-mcp'

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