Provides geocoding, point-of-interest searching, and geographic geometry tools to facilitate locating areas and defining boundaries for satellite imagery tasks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SkyFi MCP Serverfind high-resolution satellite imagery for the Grand Canyon"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

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
Install the MCP extension in Cursor
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"
}
}
}
}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)
Open Windsurf Settings (
Ctrl/Cmd + ,)Navigate to Extensions β MCP Servers
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)
Install the MCP Extension from VSCode Marketplace
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"
}
}
}
}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 pythonorwhere python)Working Directory: Must point to the project root where
mcp_skyfimodule is locatedAPI Key Format: Must be
email:hashformat 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/pythonvenv:
./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_searchGet a pricing quote for satellite tasking over downtown Austin, TexasExpected Result: You should see 21 tools available (13 SkyFi + 8 OSM tools)
Environment Variables
The server supports these environment variables:
Variable | Required | Description | Example |
| Yes | Your SkyFi API credentials |
|
| Yes | SkyFi API endpoint |
|
| No | OpenWeatherMap API key |
|
| No | Logging level |
|
| No | Log format |
|
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 8000Available 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 filtersskyfi_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 optionsskyfi_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 alertsskyfi_setup_area_monitoring- Set up automated monitoring for new imagery in a specific areaskyfi_get_notification_status- Check the status and delivery history of webhook notifications
Pricing & Analysis
skyfi_calculate_archive_pricing- Calculate pricing for archive satellite imagery ordersskyfi_estimate_tasking_cost- Estimate costs for new satellite imagery tasking ordersskyfi_analyze_capture_feasibility- Analyze the feasibility of satellite imagery capture for a specific area and time periodskyfi_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 geocodingosm_reverse_geocode- Convert coordinates to address and location information using OpenStreetMaposm_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 locationosm_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 searchosm_create_bounding_box- Create a bounding box geometry from a set of coordinate pointsosm_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 processedIntegrations
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
docs/- Comprehensive documentation including:docs/ARCHITECTURE.md- System architecture overviewdocs/OAUTH21_COMPLIANCE.md- OAuth 2.1 implementation detailsdocs/SECURITY_AUDIT_FINAL_REPORT.md- Security audit resultsdocs/MCP-Development-Philosophy.md- Development philosophydocs/PRD/- Product requirements and development checklists
tests/- Comprehensive test suite with unit, integration, and protocol testsCLAUDE.md- Claude Code configuration and development instructions
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 functionsTesting
# 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 httpTroubleshooting
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:
Test the server directly:
python -m mcp_skyfi --config-checkCheck that all dependencies are installed:
pip install -e .Verify your API credentials are correct
4. Authentication Errors
Problem: Invalid API key format or credentials.
Solution:
Check your SkyFi account for the correct API key format (
email:hash)Ensure the SKYFI_URL points to the correct endpoint
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 stdioQuick Verification
To verify your MCP server is working correctly:
Test server startup:
python -m mcp_skyfi --config-checkShould show:
β Configuration is validTest 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"Verify tool count: You should see 21 tools available (13 SkyFi + 8 OSM tools)
Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests
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
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.