SkyFi MCP Server
Integrates SkyFi satellite imagery and OpenStreetMap services with AI applications to enable high-resolution image searching, ordering, and area monitoring. It provides 21 tools for geospatial tasks, including geocoding, tasking quotes, and satellite pass prediction.
README

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 located - API 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/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 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 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
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 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:
- Test the server directly:
python -m mcp_skyfi --config-check - Check 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 stdio
Quick Verification
To verify your MCP server is working correctly:
-
Test server startup:
python -m mcp_skyfi --config-checkShould show:
✅ Configuration is valid -
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" -
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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。