Skyfi Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Skyfi Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A production-ready MCP server for SkyFi's satellite imagery Platform API. Search 150+ satellites from 12+ providers, compare pricing, and order archive or tasking imagery — all through natural language with any AI agent.
SkyFi aggregates imagery from Planet, Vantor, ICEYE, Umbra, Satellogic, and others into a single API with transparent pricing and no contracts. This MCP server makes that API accessible to Claude, GPT, Gemini, LangChain, and any MCP-compatible agent.
graph LR
A[AI Agent] -->|MCP Protocol| B[SkyFi MCP Server]
B -->|REST API| C[SkyFi Platform API]
B -->|Nominatim| K[OpenStreetMap]
C --> D[Planet]
C --> E[Vantor]
C --> F[ICEYE]
C --> G[Umbra]
C --> H[Satellogic]
C --> I[Sentinel-1/2]
C --> J[12+ more...]pip install skyfi-mcp
# or from source:
git clone https://github.com/jpwilson/skyfi-mcp.git
cd skyfi-mcp && pip install -e .export SKYFI_API_KEY=your_api_key # Get one at https://app.skyfi.com# Remote server (production)
skyfi-mcp
# → Listening at http://localhost:8000/mcp
# Local stdio (development)
SKYFI_MCP_TRANSPORT=stdio skyfi-mcpClaude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"skyfi": {
"url": "http://localhost:8000/mcp"
}
}
}Claude Code:
claude mcp add skyfi http://localhost:8000/mcp"Find free Sentinel-2 imagery over the Amazon basin"
This uses open data ($0) — no credit card needed.
| Tool | Description |
|---|---|
| SkyFi API | |
skyfi_whoami | Check account status, budget, payment method |
skyfi_search_archives | Search archive imagery by location, date, sensor, provider |
skyfi_get_archive | Get full details for an archive image |
skyfi_get_pricing | Get pricing by AOI, product type, provider |
skyfi_create_feasibility | Create tasking feasibility check |
skyfi_get_feasibility | Poll feasibility results and provider windows |
skyfi_predict_passes | Satellite pass prediction for tasking timing |
skyfi_create_archive_order | Stage an archive order (shows price, requires confirmation) |
skyfi_create_tasking_order | Stage a tasking order (shows price, requires confirmation) |
skyfi_confirm_order | Execute a staged order (this commits money) |
skyfi_list_orders | List orders with status/type filters |
skyfi_get_order | Get order details |
skyfi_redeliver_order | Redeliver completed order to different cloud bucket |
skyfi_get_deliverables | Get download URLs for completed orders |
skyfi_create_notification | Set up AOI monitoring with webhook alerts |
skyfi_list_notifications | List active monitoring notifications |
skyfi_manage_notification | Get or delete a notification |
| OpenStreetMap | |
osm_geocode | Convert place names to coordinates + SkyFi-ready WKT polygons |
osm_reverse_geocode | Convert coordinates to place names and addresses |
osm_search_nearby | Find features (airports, ports, etc.) near a location |
Orders use a two-step confirmation pattern:
skyfi_create_archive_order or skyfi_create_tasking_order calls the API and returns a price summaryskyfi_confirm_order marks the order as human-approvedOrder: VANTOR 30cm DAY, 12.4 sq km, $847. Deliver to S3. Confirm?Free open-data orders ($0 Sentinel-1/2) still show confirmation but note "Free — no charge."
1. skyfi_create_feasibility → get feasibility ID
2. skyfi_get_feasibility → poll for provider windows
3. skyfi_predict_passes → (optional) check satellite timing
4. skyfi_create_tasking_order → stage with selected provider/window
5. skyfi_confirm_order → execute after human approvalProvider-specific: Planet supports provider_window_id selection from feasibility results.
| Provider | Method | Example |
|---|---|---|
| Claude Desktop | MCP config | Setup guide |
| Claude Code | claude mcp add | Setup guide |
| OpenAI | Function calling | examples/openai_example.py |
| Anthropic SDK | Tool use | examples/anthropic_example.py |
| Google Gemini | Function calling | examples/gemini_example.py |
| Google ADK | MCPToolset | examples/adk_example.py |
| LangChain | MCP adapter | examples/langchain_example.py |
| Vercel AI SDK | MCP client | Setup guide |
railway login && railway init
railway variables set SKYFI_API_KEY=your_key
railway up
# → https://your-project.up.railway.app/mcpdocker build -t skyfi-mcp .
docker run -p 8000:8000 -e SKYFI_API_KEY=your_key skyfi-mcpOr with docker-compose:
echo "SKYFI_API_KEY=your_key" > .env
docker-compose upAuth is resolved in priority order:
X-Skyfi-Api-Key request header (cloud deployment)SKYFI_API_KEY environment variable~/.skyfi/config.json (or SKYFI_CONFIG_PATH)Environment variables:
| Variable | Default | Description |
|---|---|---|
SKYFI_API_KEY | — | SkyFi Platform API key |
SKYFI_MCP_HOST | 0.0.0.0 | Server bind host |
SKYFI_MCP_PORT | 8000 | Server bind port |
SKYFI_MCP_TRANSPORT | streamable-http | Transport: streamable-http, sse, stdio |
SKYFI_API_BASE_URL | https://app.skyfi.com/platform-api | API base URL override |
POLYGON (convex)# Install with dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=skyfi_mcp --cov-report=term-missing
# Lint
ruff check src/ tests/
# Type check
mypy src/
# Security scan
bandit -r src/git checkout -b feature/amazing-feature)pytest)ruff check . && mypy src/)MIT — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.