Skip to main content
Glama
prd.md29.7 kB
# SkyFi MCP Server - Phase 1 PRD **Version:** 1.0 **Date:** November 18, 2025 **Status:** Draft **Owner:** [Your Name] **Organization:** SkyFi --- ## 1. Executive Summary Phase 1 delivers a production-ready Model Context Protocol (MCP) server that enables AI agents to programmatically access SkyFi's geospatial data services. This remote MCP server will expose SkyFi's public API through a standardized protocol, allowing autonomous agents like Claude, ChatGPT, and custom AI assistants to search, price, order, and monitor satellite imagery through natural conversation. **Core Value:** Transform SkyFi from a human-operated platform into an AI-native geospatial data provider, positioning SkyFi as the default choice when AI agents need satellite imagery. --- ## 2. Problem Statement Currently, AI agents cannot independently access SkyFi's geospatial data because: - No standardized protocol exists for AI-to-SkyFi communication - Direct API integration requires custom code for each AI framework - Complex order workflows don't translate to conversational interfaces - No safe way for agents to explore, price, and confirm orders autonomously **Phase 1 Solution:** Build the foundational MCP server infrastructure that makes SkyFi "conversable" for any AI agent. --- ## 3. Goals & Success Metrics ### Primary Goals 1. **Functional Completeness:** Support all core SkyFi operations through MCP 2. **Production Ready:** Deployable, secure, and maintainable 3. **Developer Friendly:** Clear documentation and easy self-hosting 4. **Foundation for Growth:** Extensible architecture for Phase 2+ ### Success Metrics - ✅ All P0 features implemented and tested - ✅ <500ms average response time for search queries - ✅ 99% uptime for demo deployment - ✅ Zero security vulnerabilities in authentication - ✅ Complete API documentation with examples - ✅ Successful integration with at least 2 AI frameworks - ✅ GitHub repo published with MIT license --- ## 4. Scope ### In Scope - Phase 1 - Remote MCP server with HTTP + SSE transport - Full SkyFi API integration (search, pricing, ordering, monitoring) - Secure authentication and credential management - Conversational order confirmation workflow - Docker deployment configuration - Comprehensive documentation - Demo deployment instance ### Out of Scope - Phase 1 - Demo agent application (Phase 2) - Multi-tenant hosting service - Framework-specific packages (LangChain, ADK, etc.) - Custom UI/dashboard for the MCP - Advanced analytics or usage tracking - Payment processing beyond SkyFi's existing API - Mobile client applications --- ## 5. User Personas ### Primary: AI Agent Developer **Profile:** Software engineer building AI-powered applications **Goals:** - Integrate geospatial data into AI agents with minimal code - Reliable, documented API access - Easy local development and testing **Pain Points:** - Complex geospatial APIs with steep learning curves - No standardized way to connect AI agents to data sources - Unclear pricing before committing to orders ### Secondary: AI Agent (Autonomous) **Profile:** Claude, GPT-4, or custom autonomous agent **Goals:** - Search and order satellite imagery on behalf of users - Confirm costs before spending money - Monitor areas of interest for changes **Pain Points:** - Cannot interpret traditional REST API documentation - Need conversational, tool-based interfaces - Must have clear success/failure responses ### Tertiary: SkyFi Internal Team **Profile:** SkyFi engineering and product teams **Goals:** - Maintain and extend the MCP server - Monitor usage and performance - Support developers using the MCP **Pain Points:** - Need clear architecture documentation - Must be able to deploy updates safely - Require visibility into errors and usage patterns --- ## 6. Functional Requirements ### P0: Must-Have (Core Functionality) #### 6.1 Archive Search & Data Exploration **User Story:** As an AI agent, I want to search SkyFi's archive so I can find existing imagery for a location and time range. **Requirements:** - Tool: `search_archive` - Parameters: - `location` (required): Lat/long, address, or GeoJSON polygon - `date_range` (optional): Start and end dates - `resolution` (optional): Filter by image resolution - `image_type` (optional): optical, SAR, multispectral, etc. - `open_data_only` (optional): Boolean for free imagery - `limit` (optional): Number of results (default: 10, max: 50) - Returns: List of available imagery with metadata (date, resolution, price, provider, preview URL) - Error handling: Invalid location, no results found, API errors #### 6.2 Pricing & Feasibility Checks **User Story:** As an AI agent, I want to check pricing before placing an order so I can confirm costs with the user. **Requirements:** - Tool: `get_pricing_estimate` - Parameters: - `image_id` (for archive) OR `tasking_request` (for new capture) - `location` (for tasking): AOI polygon - `resolution` (for tasking) - `capture_date` (for tasking) - Returns: Price estimate with breakdown, minimum AOI, provider info - Tool: `check_order_feasibility` - Parameters: Same as pricing - Returns: Boolean feasibility + reason if not feasible (e.g., "AOI too small", "cloud coverage expected", "satellite unavailable") #### 6.3 Order Placement with Confirmation **User Story:** As an AI agent, I want to place orders with explicit user confirmation so I never spend money without permission. **Requirements:** - Tool: `place_order` - Parameters: - `image_id` OR `tasking_request` - `delivery_options` (optional): Cloud storage destination - `user_confirmation_token` (required): Proof of user approval - **Critical Flow:** 1. Agent calls `get_pricing_estimate` 2. Agent presents price to user and gets explicit "yes" 3. Agent receives confirmation token from user 4. Agent calls `place_order` with token - Returns: Order ID, status, estimated delivery time - Error handling: Insufficient funds, invalid AOI, confirmation token mismatch #### 6.4 Order Status & History **User Story:** As an AI agent, I want to check order status and history so I can track deliveries and reference past purchases. **Requirements:** - Tool: `get_order_status` - Parameters: `order_id` - Returns: Status, progress percentage, ETA, download links when ready - Tool: `list_orders` - Parameters: `limit`, `status_filter`, `date_range` - Returns: List of orders with key metadata - Polling support: Agent can check status periodically #### 6.5 AOI Monitoring Setup **User Story:** As an AI agent, I want to set up monitoring for areas of interest so users get notified when new imagery becomes available. **Requirements:** - Tool: `create_monitor` - Parameters: - `location`: AOI polygon - `monitoring_criteria`: Resolution, image type, frequency - `webhook_url`: Where to send notifications - `notification_preferences`: What triggers notifications - Returns: Monitor ID, status - Tool: `list_monitors` / `delete_monitor` - **Note:** If SkyFi API doesn't support webhooks natively, implement polling + webhook dispatch on MCP side #### 6.6 Authentication & Security **Requirements:** - Support for SkyFi API key authentication - **Security Model:** - **Local deployment:** User provides their own SkyFi API key via environment variable - **Demo deployment:** Stateless sessions where user provides key per-session (encrypted in transit only) - Never store API keys in databases or logs - SSL/TLS required for all communications - Rate limiting per API key - Input validation and sanitization #### 6.7 MCP Protocol Compliance **Requirements:** - Implement MCP specification (HTTP + SSE transport) - Standard tool discovery via `tools/list` - Standard tool execution via `tools/call` - Proper error responses following MCP spec - Server-sent events for long-running operations (order processing) - Resource endpoints for imagery metadata --- ### P1: Should-Have (Enhanced Functionality) #### 6.8 OpenStreetMap Integration **User Story:** As an AI agent, I want to search by place names and landmarks so users don't need to provide coordinates. **Requirements:** - Tool: `geocode_location` - Parameters: `place_name` (e.g., "Golden Gate Bridge", "Austin, TX") - Returns: GeoJSON polygon or bounding box - Integration with Nominatim or similar OSM API - Cache frequent lookups #### 6.9 Intelligent Search Refinement **User Story:** As an AI agent, I want suggestions when searches return no results so I can help users find alternatives. **Requirements:** - When `search_archive` returns 0 results, include suggestions: - Expand date range - Lower resolution requirement - Try open data sources - Consider tasking new imagery - Tool: `suggest_alternatives` #### 6.10 Batch Operations **User Story:** As an AI agent, I want to place multiple orders at once so I can efficiently fulfill bulk requests. **Requirements:** - Tool: `batch_order` - Parameters: Array of order requests - Returns: Array of order IDs and statuses - Transaction handling: All or nothing, or partial success with clear reporting --- ### P2: Nice-to-Have (Future Enhancements) #### 6.11 Advanced Analytics Integration - Expose SkyFi Insights analytics capabilities - Tool for running change detection, object counting, etc. #### 6.12 Delivery Status Webhooks - Reverse webhooks: MCP server notifies AI agent when order completes - Requires agent to register a callback URL #### 6.13 Cost Management Tools - Budget tracking per session - Spending alerts - Monthly cost summaries --- ## 7. Non-Functional Requirements ### 7.1 Performance - **Search queries:** < 500ms average response time - **Order placement:** < 2s response time - **SSE updates:** < 100ms latency for status changes - **Concurrent requests:** Support 100+ simultaneous connections - **Throughput:** Handle 1000+ requests/hour per instance ### 7.2 Reliability - **Uptime:** 99% for demo deployment - **Error recovery:** Graceful degradation when SkyFi API is down - **Retry logic:** Exponential backoff for transient failures - **Idempotency:** Order placement is idempotent (duplicate prevention) ### 7.3 Security - **Authentication:** API key required for all requests - **Transport:** TLS 1.3 for all connections - **Input validation:** Sanitize all user inputs - **Rate limiting:** 100 requests/minute per API key - **Secrets management:** Never log or expose API keys - **CORS:** Configurable allowed origins ### 7.4 Scalability - **Horizontal scaling:** Stateless design for easy replication - **Resource limits:** Configurable memory and CPU constraints - **Connection pooling:** Efficient HTTP client for SkyFi API - **Caching:** Cache static data (providers, resolutions) for 1 hour ### 7.5 Maintainability - **Code quality:** TypeScript with strict typing, 80%+ test coverage - **Documentation:** Inline JSDoc for all public APIs - **Logging:** Structured logs with correlation IDs - **Monitoring:** Health check endpoint, metrics export (Prometheus format) - **Versioning:** Semantic versioning for releases ### 7.6 Observability - **Health checks:** `/health` endpoint with dependency status - **Metrics:** Request count, latency, error rate - **Tracing:** Distributed tracing support (OpenTelemetry) - **Logs:** JSON structured logs with log levels --- ## 8. Technical Architecture ### 8.1 System Architecture ``` ┌─────────────────────────────────────────────────────────────┐ │ AI Agent │ │ (Claude, GPT, etc) │ └────────────────────────┬────────────────────────────────────┘ │ MCP Protocol (HTTP + SSE) ↓ ┌─────────────────────────────────────────────────────────────┐ │ SkyFi MCP Server │ │ ┌────────────┬──────────────┬───────────────┬────────────┐ │ │ │ MCP │ Auth & │ Business │ API │ │ │ │ Protocol │ Validation │ Logic │ Client │ │ │ │ Handler │ Middleware │ Services │ (SkyFi) │ │ │ └────────────┴──────────────┴───────────────┴────────────┘ │ └────────────────────────┬────────────────────────────────────┘ │ HTTPS (REST) ↓ ┌─────────────────────────────────────────────────────────────┐ │ SkyFi Public API │ │ (Archive, Orders, Tasking, Monitoring) │ └─────────────────────────────────────────────────────────────┘ ``` ### 8.2 Technology Stack - **Runtime:** Node.js 20+ LTS - **Language:** TypeScript 5.x - **Framework:** Express.js - **MCP SDK:** @modelcontextprotocol/sdk - **HTTP Client:** Axios with retry logic - **Validation:** Zod for schema validation - **Testing:** Vitest + Supertest - **Containerization:** Docker with multi-stage builds - **Package Manager:** pnpm ### 8.3 Project Structure ``` skyfi-mcp/ ├── src/ │ ├── server/ # Express server setup │ ├── mcp/ # MCP protocol handlers │ ├── tools/ # MCP tool implementations │ ├── services/ # Business logic │ │ ├── skyfi/ # SkyFi API client │ │ ├── geocoding/ # OSM integration │ │ └── monitoring/ # AOI monitoring logic │ ├── middleware/ # Auth, validation, rate limiting │ ├── models/ # TypeScript types and schemas │ ├── utils/ # Helper functions │ └── config/ # Configuration management ├── docs/ │ ├── api/ # MCP API documentation │ ├── architecture/ # Architecture diagrams │ ├── integration/ # Integration guides │ └── deployment/ # Deployment instructions ├── tests/ │ ├── unit/ │ ├── integration/ │ └── e2e/ ├── scripts/ # Utility scripts ├── docker/ │ ├── Dockerfile │ └── docker-compose.yml ├── .env.example ├── package.json └── README.md ``` ### 8.4 Data Models #### Tool Request/Response ```typescript interface SearchArchiveRequest { location: string | GeoJSON; dateRange?: { start: string; end: string }; resolution?: string; imageType?: 'optical' | 'sar' | 'multispectral' | 'hyperspectral'; openDataOnly?: boolean; limit?: number; } interface ImageResult { id: string; provider: string; captureDate: string; resolution: string; imageType: string; price: number; currency: string; previewUrl: string; bounds: GeoJSON; cloudCoverage?: number; } ``` #### Order Model ```typescript interface Order { id: string; status: 'pending' | 'processing' | 'completed' | 'failed'; imageId?: string; taskingRequest?: TaskingRequest; price: number; createdAt: string; estimatedDelivery: string; downloadUrls?: string[]; errorMessage?: string; } ``` ### 8.5 API Endpoints (MCP Tools) | Tool Name | Purpose | Parameters | Returns | |-----------|---------|------------|---------| | `search_archive` | Find existing imagery | location, filters | ImageResult[] | | `get_pricing_estimate` | Get price quote | image_id or tasking spec | Price breakdown | | `check_order_feasibility` | Validate order | Same as pricing | Feasibility status | | `place_order` | Purchase imagery | image_id or tasking, token | Order ID | | `get_order_status` | Check order progress | order_id | Order details | | `list_orders` | View order history | filters | Order[] | | `create_monitor` | Set up AOI monitoring | location, criteria, webhook | Monitor ID | | `list_monitors` | View active monitors | - | Monitor[] | | `delete_monitor` | Remove monitor | monitor_id | Success status | | `geocode_location` | Convert place to coords | place_name | GeoJSON | --- ## 9. User Experience & Design ### 9.1 Conversational Flow Examples #### Example 1: Simple Archive Search ``` User: "Show me recent satellite imagery of Austin, Texas" Agent → MCP: search_archive({ location: "Austin, Texas", dateRange: { start: "2025-10-01", end: "2025-11-18" } }) MCP → Agent: [5 results with previews, dates, prices] Agent → User: "I found 5 recent images. The most recent is from Nov 15 at 50cm resolution for $45. Would you like to see the others or order this one?" ``` #### Example 2: Order with Confirmation ``` User: "Order that November 15th image" Agent → MCP: get_pricing_estimate({ image_id: "img_abc123" }) MCP → Agent: { price: 45.00, resolution: "50cm", ... } Agent → User: "This image costs $45.00 for a 50cm resolution capture. Shall I proceed with the order?" User: "Yes, order it" Agent → MCP: place_order({ image_id: "img_abc123", user_confirmation_token: "confirmed_xyz789" }) MCP → Agent: { order_id: "ord_def456", status: "processing" } Agent → User: "Order placed! Your image will be ready in about 30 minutes. Order ID: ord_def456" ``` #### Example 3: Setting Up Monitoring ``` User: "Alert me when new imagery becomes available for my office building in San Francisco" Agent → MCP: geocode_location({ place_name: "San Francisco" }) Agent → User: "Could you provide the specific address or describe the area more precisely?" User: "Golden Gate Park" Agent → MCP: create_monitor({ location: <Golden Gate Park GeoJSON>, criteria: { resolution: "1m", imageType: "optical" }, webhook_url: "https://user-notification-service.com/webhook" }) MCP → Agent: { monitor_id: "mon_ghi789", status: "active" } Agent → User: "I've set up monitoring for Golden Gate Park. You'll receive notifications when new 1m resolution optical imagery becomes available." ``` ### 9.2 Error Handling - **Clear error messages:** Human-readable descriptions - **Actionable guidance:** Suggest next steps when operations fail - **Graceful degradation:** Continue working when optional features fail --- ## 10. Security Considerations ### 10.1 Authentication Model **Two deployment modes:** #### Self-Hosted Mode (Recommended) - User runs their own MCP server instance - SkyFi API key set via environment variable - Key never leaves user's infrastructure - Most secure option #### Demo/Hosted Mode - User provides API key per-session via secure parameter - Key stored in memory only for session duration - Encrypted in transit (TLS) - Rate limiting to prevent abuse - Clear warnings about security implications ### 10.2 Authorization - All operations require valid SkyFi API key - Order placement requires explicit confirmation token - Monitor webhooks must be HTTPS ### 10.3 Data Privacy - No PII stored by MCP server - Logs sanitized to remove API keys - No tracking or analytics without opt-in ### 10.4 Threat Mitigation - **SSRF protection:** Validate webhook URLs - **Input injection:** Sanitize all location inputs - **Rate limiting:** Prevent DoS attacks - **Dependency scanning:** Automated CVE checks --- ## 11. Testing Strategy ### 11.1 Unit Tests - All business logic functions - Tool parameter validation - Error handling paths - Target: 80%+ code coverage ### 11.2 Integration Tests - MCP protocol compliance - SkyFi API integration (with mocks) - End-to-end tool execution - Authentication flows ### 11.3 E2E Tests - Complete user workflows - Order placement flow - Monitoring setup - Error recovery ### 11.4 Manual Testing - Test with real AI agents (Claude Desktop, GPT with function calling) - Validate conversational flows - Test with actual SkyFi API (using open data) ### 11.5 Performance Testing - Load testing with k6 or Artillery - 1000 requests/hour sustained - Monitor memory leaks - Profile slow operations --- ## 12. Deployment Strategy ### 12.1 Local Development ```bash # Clone repo git clone https://github.com/skyfi/skyfi-mcp.git cd skyfi-mcp # Install dependencies pnpm install # Configure cp .env.example .env # Add SKYFI_API_KEY=your_key_here # Run in development pnpm dev # Run tests pnpm test ``` ### 12.2 Docker Deployment ```bash # Build image docker build -t skyfi-mcp . # Run container docker run -p 3000:3000 \ -e SKYFI_API_KEY=your_key \ skyfi-mcp ``` ### 12.3 Production Deployment **Demo Instance:** Railway or Render - Free tier initially - Auto-deploy from main branch - Environment variables managed in dashboard - Custom domain: `mcp.skyfi.com` or similar **User Deployments:** - Provide Docker Compose file - Document deployment to major cloud providers: - AWS ECS - Google Cloud Run - Azure Container Instances - DigitalOcean App Platform ### 12.4 CI/CD Pipeline - **On PR:** Run tests, lint, type check - **On merge to main:** - Run full test suite - Build Docker image - Deploy to demo instance (if tests pass) - Tag release with semantic version --- ## 13. Documentation Requirements ### 13.1 README.md - Project overview and purpose - Quick start guide (< 5 minutes to first request) - Architecture diagram - Link to full documentation ### 13.2 API Documentation - Complete tool reference - Parameter descriptions and examples - Response schemas - Error codes and meanings - Rate limits and quotas ### 13.3 Integration Guides - How to connect Claude Desktop - How to use with LangChain (basic example) - How to use with AI SDK (basic example) - Custom integration guide ### 13.4 Deployment Guides - Local development setup - Docker deployment - Cloud provider specific guides - Environment variable reference - Troubleshooting common issues ### 13.5 Architecture Documentation - System architecture diagrams - Sequence diagrams for key flows - Data models and schemas - Security model explanation - Extension points for Phase 2+ ### 13.6 Contributing Guide - Code style and standards - How to run tests - PR process - Issue templates --- ## 14. Dependencies & Assumptions ### 14.1 External Dependencies - **SkyFi Public API:** Must be stable and documented - **SkyFi API Key:** Users must have Pro account - **OpenStreetMap Nominatim:** For geocoding (public API) - **MCP SDK:** Official SDK from Anthropic ### 14.2 Assumptions 1. SkyFi API has comprehensive documentation (Swagger/OpenAPI) 2. SkyFi API supports webhook notifications OR we can poll 3. Order confirmation can be implemented via token mechanism 4. SkyFi pricing is deterministic (same inputs = same price) 5. SkyFi API is RESTful and uses standard HTTP codes 6. Users have their own SkyFi accounts and API keys ### 14.3 Risks & Mitigations | Risk | Impact | Probability | Mitigation | |------|--------|-------------|------------| | SkyFi API changes | High | Medium | Version pinning, automated tests | | Rate limiting issues | Medium | Medium | Implement backoff, document limits | | Webhook support missing | Medium | Medium | Build polling + webhook dispatch | | MCP spec changes | Medium | Low | Pin SDK version, monitor updates | | Security vulnerability | High | Low | Automated scanning, security audits | --- ## 15. Timeline & Milestones ### Milestone 1: Foundation (Week 1-2) - ✅ Project setup (repo, CI/CD, Docker) - ✅ MCP server skeleton with protocol handlers - ✅ SkyFi API client with authentication - ✅ Basic health check and metrics ### Milestone 2: Core Tools (Week 3-4) - ✅ Archive search tool - ✅ Pricing and feasibility tools - ✅ Order placement with confirmation flow - ✅ Order status and history tools - ✅ Unit tests for all tools ### Milestone 3: Advanced Features (Week 5) - ✅ AOI monitoring setup - ✅ OpenStreetMap geocoding - ✅ Error handling and validation - ✅ Integration tests ### Milestone 4: Polish & Deploy (Week 6) - ✅ Documentation (all sections) - ✅ E2E testing with real AI agent - ✅ Demo deployment to Railway/Render - ✅ Performance testing and optimization - ✅ Security audit - ✅ GitHub repo published **Total Duration:** 6 weeks (with 1 developer full-time) --- ## 16. Launch Checklist ### Pre-Launch - [ ] All P0 features implemented and tested - [ ] Demo deployment live and stable - [ ] Complete documentation published - [ ] Security review completed (no critical issues) - [ ] Performance tests passed (all metrics met) - [ ] At least 2 successful AI agent integrations tested ### Launch Day - [ ] GitHub repo made public - [ ] Docker image published to Docker Hub - [ ] Demo instance URL shared - [ ] Blog post or announcement published - [ ] Submit to MCP directory (if exists) - [ ] Share on relevant communities (Reddit, HN, Discord) ### Post-Launch (First Week) - [ ] Monitor error rates and performance - [ ] Respond to GitHub issues within 24 hours - [ ] Collect feedback from early users - [ ] Fix critical bugs immediately - [ ] Document common questions in FAQ --- ## 17. Success Criteria Phase 1 is considered successful when: 1. ✅ **Technical:** All P0 features working in production 2. ✅ **Quality:** 99% uptime, <500ms avg response time 3. ✅ **Security:** Zero critical vulnerabilities 4. ✅ **Usability:** Developer can integrate in < 30 minutes 5. ✅ **Documentation:** Complete docs with examples 6. ✅ **Adoption:** At least 5 external developers testing 7. ✅ **Foundation:** Architecture ready for Phase 2 (demo agent) --- ## 18. Post-Phase 1 Considerations ### Transition to Phase 2 - Codebase frozen except for critical bugs - Focus shifts to demo agent development - Demo agent will be primary feedback source for improvements - Maintain backward compatibility in any updates ### Known Phase 1 Limitations - Basic error messages (Phase 2 will improve UX) - No usage dashboard (analytics in Phase 2+) - Limited framework integrations (covered in Phase 2) - No mobile clients (out of scope) ### Technical Debt to Address - Performance optimization based on real usage - Caching strategy refinement - Enhanced monitoring and alerting - Automated security scanning in CI --- ## Appendix A: Tool Reference (Quick View) | Tool | Input | Output | Purpose | |------|-------|--------|---------| | search_archive | location, filters | ImageResult[] | Find existing imagery | | get_pricing_estimate | image_id or spec | Price | Get cost before order | | check_order_feasibility | order spec | Boolean + reason | Validate order viability | | place_order | image_id, token | Order ID | Purchase imagery | | get_order_status | order_id | Order details | Track order progress | | list_orders | filters | Order[] | View purchase history | | create_monitor | AOI, criteria | Monitor ID | Set up alerts | | list_monitors | - | Monitor[] | View active monitors | | delete_monitor | monitor_id | Success | Remove monitor | | geocode_location | place name | GeoJSON | Convert address to coords | --- ## Appendix B: Environment Variables ```bash # Required SKYFI_API_KEY=your_skyfi_api_key_here PORT=3000 # Optional NODE_ENV=production LOG_LEVEL=info RATE_LIMIT_REQUESTS=100 RATE_LIMIT_WINDOW_MS=60000 CACHE_TTL_SECONDS=3600 MAX_CONCURRENT_REQUESTS=100 # External Services NOMINATIM_API_URL=https://nominatim.openstreetmap.org ``` --- ## Appendix C: Error Codes | Code | Meaning | Resolution | |------|---------|------------| | AUTH_INVALID | Invalid API key | Check SKYFI_API_KEY | | LOCATION_INVALID | Bad location input | Provide valid coords or address | | NO_RESULTS | Search returned nothing | Adjust search parameters | | ORDER_FAILED | Order could not be placed | Check feasibility first | | RATE_LIMITED | Too many requests | Wait and retry | | INTERNAL_ERROR | Server error | Check logs, retry | --- ## Appendix D: Example MCP Tool Call ```json { "method": "tools/call", "params": { "name": "search_archive", "arguments": { "location": "Austin, Texas", "dateRange": { "start": "2025-11-01", "end": "2025-11-18" }, "resolution": "50cm", "openDataOnly": false, "limit": 5 } } } ``` **Response:** ```json { "content": [ { "type": "text", "text": "Found 3 images matching your criteria:\n\n1. November 15, 2025 - 50cm resolution - $45.00\n Provider: Maxar\n Cloud coverage: 5%\n Preview: [link]\n\n2. November 10, 2025 - 50cm resolution - $42.00\n Provider: Planet\n Cloud coverage: 15%\n Preview: [link]\n\n3. November 3, 2025 - 75cm resolution - $28.00\n Provider: Satellogic\n Cloud coverage: 8%\n Preview: [link]" } ] } ``` --- **END OF PRD** --- ## Document Control | Version | Date | Author | Changes | |---------|------|--------|---------| | 1.0 | 2025-11-18 | [Your Name] | Initial draft | **Review & Approval:** - [ ] Technical Lead - [ ] Product Manager - [ ] Security Team - [ ] SkyFi Stakeholder

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/mfuechec/SkyFiMCP'

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