Skip to main content
Glama
PSkinnerTech

SkyFi MCP Server

by PSkinnerTech

SkyFi Logo

SkyFi MCP Server

A Model Context Protocol (MCP) server for integrating SkyFi satellite imagery capabilities with AI applications.

Overview

This MCP server provides AI applications with access to SkyFi's satellite imagery platform, enabling:

  • Satellite Image Search & Ordering: Search and order high-resolution satellite imagery

  • Archive Data Access: Access to historical satellite imagery archives

  • Real-time Monitoring: Set up monitoring for specific areas of interest

  • Multi-source Integration: Integration with OpenStreetMap and weather data

Quick Start

Prerequisites

  • Python 3.11+

  • SkyFi API credentials

  • Optional: OpenWeatherMap API key for weather integration

Installation

# Clone the repository
git clone https://github.com/PSkinnerTech/SkyFi-MCP.git
cd SkyFi-MCP

# Install dependencies
pip install -e .

MCP Client Setup

Configure the SkyFi MCP server with your preferred AI development environment:

πŸ–₯️ Claude Desktop

Add to your configuration file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "skyfi": {
      "command": "/path/to/your/project/venv/bin/python",
      "args": ["-m", "mcp_skyfi"],
      "env": {
        "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
        "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
      },
      "cwd": "/path/to/your/project"
    }
  }
}

⚑ Cursor AI

  1. Install the MCP extension in Cursor

  2. Add server configuration to your Cursor settings (Cmd/Ctrl + , β†’ Extensions β†’ MCP):

{
  "mcp.servers": {
    "skyfi": {
      "command": "/path/to/your/project/venv/bin/python",
      "args": ["-m", "mcp_skyfi"],
      "cwd": "/path/to/your/project",
      "env": {
        "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
        "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
      }
    }
  }
}
  1. Alternative: Use .cursorrules file in your project root:

{
  "mcp_servers": {
    "skyfi": {
      "command": "python",
      "args": ["-m", "mcp_skyfi"],
      "env": {
        "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
        "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
      }
    }
  }
}

πŸ„ Windsurf (Codeium)

  1. Open Windsurf Settings (Ctrl/Cmd + ,)

  2. Navigate to Extensions β†’ MCP Servers

  3. Add New Server with these settings:

{
  "name": "skyfi",
  "command": "/path/to/your/project/venv/bin/python",
  "args": ["-m", "mcp_skyfi"],
  "working_directory": "/path/to/your/project",
  "environment": {
    "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
    "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
  }
}

Alternative: Project-level configuration (.windsurf/mcp.json):

{
  "servers": {
    "skyfi": {
      "command": "python",
      "args": ["-m", "mcp_skyfi"],
      "env": {
        "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
        "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
      }
    }
  }
}

πŸ“ VSCode (with MCP Extension)

  1. Install the MCP Extension from VSCode Marketplace

  2. Add to VSCode settings (Ctrl/Cmd + , β†’ Search "mcp"):

{
  "mcp.servers": {
    "skyfi": {
      "command": "/path/to/your/project/venv/bin/python",
      "args": ["-m", "mcp_skyfi"],
      "cwd": "/path/to/your/project",
      "env": {
        "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
        "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
      }
    }
  }
}
  1. Alternative: Workspace settings (.vscode/settings.json):

{
  "mcp.servers": {
    "skyfi": {
      "command": "python",
      "args": ["-m", "mcp_skyfi"],
      "env": {
        "SKYFI_API_KEY": "your-email@example.com:your-api-key-hash",
        "SKYFI_URL": "https://app.skyfi.com/platform-api/pricing"
      }
    }
  }
}

πŸ”§ Configuration Notes

🚨 Important Path Requirements:

  • Full Python Path: Use absolute path to your Python executable (find with which python or where python)

  • Working Directory: Must point to the project root where mcp_skyfi module is located

  • API Key Format: Must be email:hash format from your SkyFi account

πŸ” Finding Your Python Path:

# On macOS/Linux
which python
# Or for virtual environments
which python3

# On Windows
where python
# Or
python -c "import sys; print(sys.executable)"

πŸ“¦ Virtual Environment Paths:

  • Conda: ~/miniconda3/envs/your-env/bin/python

  • venv: ./venv/bin/python (macOS/Linux) or .\venv\Scripts\python.exe (Windows)

  • Poetry: ~/.cache/pypoetry/virtualenvs/your-project-*/bin/python

πŸ§ͺ Testing Your Setup

After configuration, test with any of these commands in your AI assistant:

Use the osm_forward_geocode tool to find coordinates for "Empire State Building, New York"
Search for recent satellite images of Central Park using skyfi_archive_search
Get a pricing quote for satellite tasking over downtown Austin, Texas

Expected Result: You should see 21 tools available (13 SkyFi + 8 OSM tools)

Environment Variables

The server supports these environment variables:

Variable

Required

Description

Example

SKYFI_API_KEY

Yes

Your SkyFi API credentials

your-email@example.com:api-key-hash

SKYFI_URL

Yes

SkyFi API endpoint

https://app.skyfi.com/platform-api/pricing

OPENWEATHER_API_KEY

No

OpenWeatherMap API key

your-openweather-key

MCP_LOG_LEVEL

No

Logging level

INFO, DEBUG, WARNING

MCP_LOG_FORMAT

No

Log format

console, json, simple

These are set in your MCP client configuration (Claude Desktop, etc.) or as system environment variables.

HTTP Transport

python -m mcp_skyfi --transport http --port 8000

Available Tools

The MCP server provides 21 tools across three categories:

πŸ›°οΈ SkyFi Satellite Imagery Tools (13 tools)

Archive & Search Tools

  • skyfi_archive_search - Search satellite imagery archive with geospatial, temporal, and quality filters

  • skyfi_archive_details - Get detailed information about a specific archive image including metadata and download options

Ordering Tools

  • skyfi_get_tasking_quote - Get detailed pricing quote and feasibility analysis for satellite tasking request (REQUIRED before ordering)

  • skyfi_create_archive_order - Create an order for existing archive satellite imagery with delivery options

  • skyfi_create_tasking_order - Confirm and create a tasking order using a previously generated quote (requires quote confirmation)

  • skyfi_get_order_status - Get current status and progress information for an existing order

Monitoring & Notifications

  • skyfi_create_webhook_subscription - Create a webhook subscription for SkyFi notifications and alerts

  • skyfi_setup_area_monitoring - Set up automated monitoring for new imagery in a specific area

  • skyfi_get_notification_status - Check the status and delivery history of webhook notifications

Pricing & Analysis

  • skyfi_calculate_archive_pricing - Calculate pricing for archive satellite imagery orders

  • skyfi_estimate_tasking_cost - Estimate costs for new satellite imagery tasking orders

  • skyfi_analyze_capture_feasibility - Analyze the feasibility of satellite imagery capture for a specific area and time period

  • skyfi_predict_satellite_passes - Predict satellite passes and optimal capture windows for a specific area

πŸ—ΊοΈ OpenStreetMap (OSM) Tools (8 tools)

Geocoding Tools

  • osm_forward_geocode - Convert address or place name to coordinates using OpenStreetMap geocoding

  • osm_reverse_geocode - Convert coordinates to address and location information using OpenStreetMap

  • osm_batch_geocode - Geocode multiple addresses or place names in a single request

Search & Discovery

  • osm_search_nearby_pois - Search for Points of Interest (POIs) near a specific location

  • osm_search_businesses - Search for specific businesses by name or type in a given area

Geometry & Analysis

  • osm_generate_aoi - Generate an Area of Interest (AOI) around a location for satellite imagery search

  • osm_create_bounding_box - Create a bounding box geometry from a set of coordinate points

  • osm_calculate_distance - Calculate distance between two geographic points using various methods

Tool Usage Examples

Example 1: Search for Satellite Images

# Use osm_forward_geocode to get coordinates
geocode_result = osm_forward_geocode(query="Central Park, New York")

# Use skyfi_archive_search to find satellite images
images = skyfi_archive_search(
    geometry=geocode_result.geometry,
    start_date="2024-01-01",
    end_date="2024-12-31",
    cloud_cover_max=20,
    limit=10
)

Example 2: Monitor an Area for New Imagery

# Create an AOI around a location
aoi = osm_generate_aoi(
    center_point=[40.7829, -73.9654],  # Central Park coordinates
    radius_meters=5000
)

# Set up monitoring for the area
monitor = skyfi_setup_area_monitoring(
    geometry=aoi.geometry,
    monitor_name="Central Park Monitoring",
    notification_settings={
        "email": "your-email@example.com",
        "webhook_url": "https://your-app.com/webhook"
    },
    frequency="daily"
)

Example 3: Get Pricing and Place Archive Order

# Calculate pricing for archive images
pricing = skyfi_calculate_archive_pricing(
    image_ids=["img_123", "img_456"],
    processing_level="L1C",
    output_format="GeoTIFF"
)

# Create an order if pricing is acceptable
if pricing.total_cost < 1000:
    order = skyfi_create_archive_order(
        image_ids=["img_123", "img_456"],
        delivery_method="download",
        output_format="GeoTIFF"
    )

Example 4: Two-Step Tasking Order (Quote + Confirmation)

# Step 1: Get detailed pricing quote (MANDATORY)
quote = skyfi_get_tasking_quote(
    geometry='{"type":"Polygon","coordinates":[[[-97.75,30.25],[-97.73,30.25],[-97.73,30.27],[-97.75,30.27],[-97.75,30.25]]]}',
    start_date="2025-02-01",
    end_date="2025-02-15",
    max_cloud_cover=15.0,
    priority="standard"
)

# Review the quote details:
# - Total cost: $120.50 USD
# - Capture probability: 75%
# - Quote expires in 24 hours

# Step 2: Confirm the order (required for security)
if quote.pricing_breakdown.total_cost_usd <= 150:
    order = skyfi_create_tasking_order(
        quote_id=quote.quote_id,
        confirm="yes"  # Explicit confirmation required
    )
    # Order created and payment processed

Integrations

  • SkyFi Platform: Primary satellite imagery provider with archive search, ordering, and tasking

  • OpenStreetMap: Geographic data, geocoding, and mapping services

  • Weather Services: Weather context for imagery analysis (future enhancement)

Authentication

Supports multiple authentication methods:

  • API Key (recommended for development)

  • OAuth 2.0 (for production deployments)

  • Personal Access Tokens (for enterprise)

Architecture

The server follows a layered architecture pattern:

  • MCP Transport Layer: Protocol handling (STDIO, HTTP, SSE)

  • Service Layer: Business logic for satellite imagery operations

  • Data Processing Layer: Model transformation and validation

  • Authentication Layer: Multi-method security handling

  • Network Layer: HTTP clients and external API management

Documentation

Development

Project Structure

src/mcp_skyfi/
β”œβ”€β”€ __init__.py           # CLI entry point
β”œβ”€β”€ exceptions.py         # Custom exceptions
β”œβ”€β”€ servers/              # Main server implementation
β”œβ”€β”€ skyfi/                # SkyFi service integration
β”œβ”€β”€ models/               # Data models
β”œβ”€β”€ middleware/           # Authentication middleware  
└── utils/                # Utility functions

Testing

# Run all tests
python -m pytest tests/

# Run specific test categories
python -m pytest tests/unit/
python -m pytest tests/integration/
python -m pytest tests/mcp_protocol/

Docker Support

# Build container
docker build -t skyfi-mcp .

# Run with STDIO
docker run -it skyfi-mcp

# Run with HTTP
docker run -p 8000:8000 skyfi-mcp --transport http

Troubleshooting

Common Issues

1. "spawn python ENOENT" Error

Problem: Claude Desktop can't find the Python executable.

Solution: Use the full path to your Python executable in the configuration:

{
  "command": "/Users/your-username/path/to/project/venv/bin/python",
  "cwd": "/Users/your-username/path/to/project"
}

2. "Server disconnected" or JSON Parsing Errors

Problem: Console output interfering with MCP protocol.

Solution: The server automatically suppresses visual output for STDIO transport. If you still see issues, ensure you're using the latest version.

3. "0 tools enabled" in Claude Desktop

Problem: Server startup issues or missing dependencies.

Solution:

  1. Test the server directly: python -m mcp_skyfi --config-check

  2. Check that all dependencies are installed: pip install -e .

  3. Verify your API credentials are correct

4. Authentication Errors

Problem: Invalid API key format or credentials.

Solution:

  1. Check your SkyFi account for the correct API key format (email:hash)

  2. Ensure the SKYFI_URL points to the correct endpoint

  3. Test your credentials with a direct API call

Testing Configuration

You can test your MCP server configuration:

# Validate configuration
python -m mcp_skyfi --config-check

# Test STDIO transport
echo '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test", "version": "1.0"}}}' | python -m mcp_skyfi

# Test tool listing
python -c "import asyncio; from mcp_skyfi.servers.main import main_mcp; print('Tools available:', len(main_mcp.list_tools()))"

Debug Mode

Enable debug logging for troubleshooting:

python -m mcp_skyfi --log-level DEBUG --transport stdio

Quick Verification

To verify your MCP server is working correctly:

  1. Test server startup:

    python -m mcp_skyfi --config-check

    Should show: βœ… Configuration is valid

  2. Test in Claude Desktop: After adding the server to Claude Desktop, try this command in Claude:

    Use the osm_forward_geocode tool to find the coordinates of "Empire State Building, New York"
  3. Verify tool count: You should see 21 tools available (13 SkyFi + 8 OSM tools)

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests

  5. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Acknowledgments

  • SkyFi for providing satellite imagery platform access

  • Anthropic for the Model Context Protocol specification

  • The MCP community for tools and best practices

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/PSkinnerTech/SkyFi-MCP-server'

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