{"id":32984845,"url":"https://github.com/weather-mcp/analytics-server","last_synced_at":"2026-04-19T06:41:12.391Z","repository":{"id":323742232,"uuid":"1094502084","full_name":"weather-mcp/analytics-server","owner":"weather-mcp","description":"Privacy-first analytics collection server for Weather MCP","archived":false,"fork":false,"pushed_at":"2025-11-11T19:46:01.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-11T22:16:51.047Z","etag":null,"topics":["analytics","fastify","postgresql","privacy","redis","timescaledb","weather-mcp"],"latest_commit_sha":null,"homepage":"https://weather-mcp.dev","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weather-mcp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-11T19:45:59.000Z","updated_at":"2025-11-11T19:46:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/weather-mcp/analytics-server","commit_stats":null,"previous_names":["weather-mcp/analytics-server"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/weather-mcp/analytics-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weather-mcp%2Fanalytics-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weather-mcp%2Fanalytics-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weather-mcp%2Fanalytics-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weather-mcp%2Fanalytics-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weather-mcp","download_url":"https://codeload.github.com/weather-mcp/analytics-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weather-mcp%2Fanalytics-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284170493,"owners_count":26959115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-13T02:00:06.582Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","fastify","postgresql","privacy","redis","timescaledb","weather-mcp"],"created_at":"2025-11-13T07:00:55.212Z","updated_at":"2026-04-19T06:41:12.383Z","avatar_url":"https://github.com/weather-mcp.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Weather MCP Analytics Server\n\nPrivacy-first analytics collection server for the Weather MCP project.\n\n## Overview\n\nThis server collects anonymous usage analytics from Weather MCP server instances to help improve the product while strictly protecting user privacy. It consists of:\n\n- **API Service**: Fastify-based REST API for receiving analytics events and serving stats\n- **Worker Process**: Background job processor for database writes and aggregations\n- **Database**: PostgreSQL with TimescaleDB for efficient time-series storage\n- **Queue**: Redis for buffering and async processing\n- **Monitoring**: Prometheus metrics + Grafana dashboards for operational observability\n\n**Note:** The public-facing analytics dashboard is hosted separately in the [website project](https://github.com/weather-mcp/website). This server provides the backend API that the website consumes.\n\n## Architecture\n\n```\nMCP Servers → API Service → Redis Queue → Worker → PostgreSQL/TimescaleDB\n       |          ↓                |                        ↓\n       |    Prometheus ←───────────┘              Public Stats API\n       |          ↓                                        ↓\n       |      Grafana                              Website Dashboard\n       |    (ops monitoring)                     (public analytics)\n       └──────────────────────────────────────────────────┘\n```\n\n## Privacy Principles\n\n- **No PII Collection**: No coordinates, location names, or user identifiers\n- **No IP Logging**: Application configured to never log IP addresses\n- **Anonymous Only**: All data truly anonymous and cannot be linked to users\n- **Opt-in**: Analytics disabled by default in MCP servers\n- **Transparent**: All collection code is open source and auditable\n\n## Features\n\n### API Endpoints\n\n- `POST /v1/events` - Event ingestion (rate limited: 60/min)\n- `GET /v1/health` - Health check\n- `GET /v1/status` - Detailed system status\n- `GET /v1/stats/overview` - Summary statistics\n- `GET /v1/stats/tools` - Tool usage stats\n- `GET /v1/stats/tool/:toolName` - Specific tool stats\n- `GET /v1/stats/errors` - Error statistics\n- `GET /v1/stats/performance` - Performance metrics\n- `GET /metrics` - Prometheus metrics\n\n### Operational Monitoring\n\n- **Prometheus** for metrics collection (30-day retention)\n- **Grafana** for operational dashboards (3 dashboards included):\n  - API Health (request rate, errors, response times)\n  - Worker \u0026 Queue (queue depth, processing stats, errors)\n  - Database \u0026 Infrastructure (query performance, connections, resources)\n- **Alertmanager** for notifications (email, Slack)\n- **15+ alert rules** across 6 groups (API, queue, worker, database, resources, data freshness)\n- Auto-refresh dashboards (10-second intervals)\n\n## Tech Stack\n\n- **Runtime**: Node.js 20 LTS\n- **Framework**: Fastify\n- **Database**: PostgreSQL 16 + TimescaleDB 2.x\n- **Queue**: Redis 7\n- **Monitoring**: Prometheus + Grafana + Alertmanager\n- **Container**: Docker + Docker Compose\n- **Reverse Proxy**: Nginx (production)\n- **Logging**: Pino (structured JSON logging)\n\n## Quick Start with Docker\n\n### 1. Clone and Configure\n\n```bash\n# Clone the repository\ngit clone https://github.com/weather-mcp/analytics-server.git\ncd analytics-server\n\n# Create environment file\ncp .env.example .env\nnano .env  # Edit configuration\n```\n\n### 2. Start All Services\n\n```bash\n# Build and start all services\ndocker-compose up -d\n\n# Check logs\ndocker-compose logs -f\n\n# Verify health\ncurl http://localhost:3000/v1/health\n```\n\n### 3. Access Services\n\n- **API**: http://localhost:3000\n- **API Health**: http://localhost:3000/v1/health\n- **Prometheus**: http://localhost:9090\n- **Grafana**: http://localhost:3001 (admin/admin)\n- **Alertmanager**: http://localhost:9093\n\n## Development Setup\n\n### Prerequisites\n\n- Node.js 20+\n- Docker and Docker Compose\n- PostgreSQL 16 with TimescaleDB (or use Docker)\n- Redis 7 (or use Docker)\n\n### 1. Install Dependencies\n\n```bash\n# Install API server dependencies\nnpm install\n\n# Install dashboard dependencies\ncd dashboard\nnpm install\ncd ..\n```\n\n### 2. Start Infrastructure\n\n```bash\n# Start PostgreSQL and Redis only\ndocker-compose up -d postgres redis\n\n# Wait for services to be ready\n./scripts/start-dev.sh\n```\n\n### 3. Initialize Database\n\n```bash\n# Run database initialization\n./scripts/init-db.sh\n\n# Or manually:\nnpm run build\nnode dist/database/migrations.js\n```\n\n### 4. Start Development Servers\n\n```bash\n# Terminal 1: API Server (with hot reload)\nnpm run dev\n\n# Terminal 2: Worker Process (with hot reload)\nnpm run dev:worker\n\n# Terminal 3: Dashboard (with hot reload)\ncd dashboard\nnpm run dev\n```\n\n### 5. Run Tests\n\n```bash\n# Run all tests\nnpm test\n\n# Run specific test suites\nnpm run test:unit\nnpm run test:integration\n\n# Generate coverage report\nnpm run test:coverage\n```\n\n## Configuration\n\nAll configuration is done via environment variables. See `.env.example` for all available options.\n\n### Key Configuration Options\n\n```bash\n# Server\nNODE_ENV=production\nPORT=3000\nLOG_LEVEL=info\n\n# Database\nDB_HOST=localhost\nDB_PORT=5432\nDB_NAME=analytics\nDB_USER=analytics\nDB_PASSWORD=your-secure-password\n\n# Redis\nREDIS_HOST=localhost\nREDIS_PORT=6379\n\n# API\nRATE_LIMIT_PER_MINUTE=60\nMAX_BATCH_SIZE=100\nAPI_BODY_LIMIT_KB=100\n\n# Security\nTRUST_PROXY=true\nCORS_ORIGIN=*\n```\n\n## API Usage\n\n### Event Ingestion\n\n```bash\ncurl -X POST http://localhost:3000/v1/events \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"events\": [\n      {\n        \"version\": \"1.0.0\",\n        \"tool\": \"get_forecast\",\n        \"status\": \"success\",\n        \"timestamp_hour\": \"2025-11-12T20:00:00Z\",\n        \"analytics_level\": \"standard\",\n        \"response_time_ms\": 150,\n        \"service\": \"noaa\",\n        \"cache_hit\": true,\n        \"country\": \"US\"\n      }\n    ]\n  }'\n```\n\n### Get Statistics\n\n```bash\n# Overview\ncurl http://localhost:3000/v1/stats/overview?period=30d\n\n# Tool stats\ncurl http://localhost:3000/v1/stats/tools?period=7d\n\n# Performance\ncurl http://localhost:3000/v1/stats/performance?period=90d\n```\n\n## Project Structure\n\n```\nanalytics-server/\n├── src/\n│   ├── api/              # Fastify API server\n│   │   ├── index.ts      # Main server with routes\n│   │   ├── stats.ts      # Stats query functions\n│   │   └── validation.ts # Event validation\n│   ├── worker/           # Event processing worker\n│   │   └── index.ts      # Worker main loop\n│   ├── database/         # PostgreSQL interactions\n│   │   ├── index.ts      # Connection pool \u0026 queries\n│   │   └── migrations.ts # Database migrations\n│   ├── queue/            # Redis queue management\n│   │   └── index.ts      # Queue operations\n│   ├── monitoring/       # Prometheus metrics\n│   │   └── metrics.ts    # Metrics definitions\n│   ├── utils/            # Utilities\n│   │   └── logger.ts     # Structured logging (Pino)\n│   ├── types/            # TypeScript types\n│   │   └── events.ts     # Event type definitions\n│   └── config.ts         # Configuration loader\n├── dashboard/            # React dashboard\n│   ├── src/\n│   │   ├── components/   # React components\n│   │   ├── api.ts        # API client\n│   │   ├── types.ts      # TypeScript types\n│   │   └── App.tsx       # Main app\n│   └── dist/             # Production build\n├── tests/\n│   ├── unit/             # Unit tests\n│   └── integration/      # Integration tests\n├── scripts/              # Utility scripts\n│   ├── init-db.sh        # Database initialization\n│   └── start-dev.sh      # Development startup\n├── docker-compose.yml    # Docker Compose config\n├── Dockerfile            # Container image (API/Worker)\n└── init.sql              # Database schema\n```\n\n## Testing\n\n```bash\n# Run all tests (76 tests total)\nnpm test\n\n# Run with coverage\nnpm run test:coverage\n\n# Run specific test files\nnpm test -- tests/integration/api.test.ts\nnpm test -- tests/integration/database.test.ts\nnpm test -- tests/integration/stats-api.test.ts\n```\n\n### Test Coverage\n\n- **Database Tests**: 32 tests (insertions, aggregations, migrations)\n- **API Tests**: 18 tests (validation, rate limiting, health checks)\n- **Stats API Tests**: 19 tests (endpoints, caching, filtering)\n- **Unit Tests**: 7 tests (validation logic, utilities)\n\n## Monitoring\n\nThe analytics server includes comprehensive operational monitoring for infrastructure health and performance.\n\n### Prometheus Metrics\n\nThe `/metrics` endpoint exposes the following metrics:\n\n- `http_requests_total` - Total HTTP requests by route and status\n- `http_request_duration_seconds` - Request duration histogram\n- `events_received_total` - Events received by analytics level and tool\n- `events_processed_total` - Events processed (success/error)\n- `queue_depth` - Current queue depth gauge\n- `database_connection_pool` - Connection pool stats (total, idle, waiting)\n- `database_query_duration_seconds` - Query performance histogram\n- `cache_operations_total` - Cache hits/misses\n- `worker_batch_size` - Worker batch size distribution\n- `worker_errors_total` - Worker errors by type\n- Plus Node.js default metrics (CPU, memory, GC, event loop, etc.)\n\n### Grafana Dashboards\n\nThree pre-configured operational dashboards are included:\n\n1. **API Health Dashboard**: Request rates, error rates, response times (p50/p95/p99), uptime\n2. **Worker \u0026 Queue Dashboard**: Queue depth, processing rates, batch sizes, worker errors\n3. **Database \u0026 Infrastructure Dashboard**: Query performance, connection pool, cache hit rates, memory/CPU\n\nAll dashboards auto-refresh every 10 seconds and include color-coded alerts.\n\n**See:** [MONITORING_GUIDE.md](docs/MONITORING_GUIDE.md) for complete monitoring documentation.\n\n## Data Retention\n\nConfigured via TimescaleDB retention policies:\n\n- **Raw events**: 90 days (auto-deleted)\n- **Daily aggregations**: 2 years\n- **Hourly aggregations**: 30 days\n- **Error summaries**: 90 days\n\n## Production Deployment\n\nThe analytics server is production-ready and includes comprehensive deployment infrastructure.\n\n### Quick Production Deployment\n\n```bash\n# 1. Clone and configure\ngit clone https://github.com/weather-mcp/analytics-server.git\ncd analytics-server\ncp .env.example .env\nnano .env  # Update with production values\n\n# 2. Start with production configuration\ndocker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d\n\n# 3. Verify deployment\n./scripts/health-check.sh\n```\n\n### Production Features\n\n- **Docker Compose** with production overrides (resource limits, security hardening)\n- **Nginx Reverse Proxy** with SSL/TLS, rate limiting, privacy-first logging\n- **Automated Database Backups** (7-day retention, compression, verification)\n- **Health Monitoring Scripts** (API, database, Redis, disk space)\n- **Cron Job Setup** (automated backups and maintenance)\n- **Resource Limits** for all services (CPU, memory)\n- **Log Rotation** configuration\n- **Security Hardening** (internal-only ports, TLS 1.2+, HSTS)\n\n### Comprehensive Documentation\n\n- **[DEPLOYMENT_GUIDE.md](docs/DEPLOYMENT_GUIDE.md)** - Complete VPS deployment walkthrough (5,500+ words)\n- **[PRE_DEPLOYMENT_CHECKLIST.md](docs/PRE_DEPLOYMENT_CHECKLIST.md)** - 80+ verification items\n- **[OPERATIONS_GUIDE.md](docs/OPERATIONS_GUIDE.md)** - Daily operations and maintenance (4,000+ words)\n- **[MONITORING_GUIDE.md](docs/MONITORING_GUIDE.md)** - Monitoring and observability (7,000+ words)\n\n### Quick Security Checklist\n\n- [ ] Change default database password in `.env`\n- [ ] Configure firewall (UFW)\n- [ ] Set up SSL/TLS certificates (Let's Encrypt recommended)\n- [ ] Update Grafana admin password\n- [ ] Configure Alertmanager email notifications\n- [ ] Set up automated backups (run `./scripts/setup-cron.sh`)\n- [ ] Verify rate limiting is working\n- [ ] Review and update CORS origins\n\n**See the full security checklist in [PRE_DEPLOYMENT_CHECKLIST.md](docs/PRE_DEPLOYMENT_CHECKLIST.md)**\n\n## Secure Deployment with Cloudflare Tunnel\n\nFor enhanced security, you can deploy the analytics server using **Cloudflare Tunnel**, which provides secure access without exposing any ports to the internet.\n\n### Security Benefits\n\n✅ **No open ports** (80/443) on the server - all ports closed except SSH\n✅ **DDoS protection** at Cloudflare's edge network\n✅ **Automatic SSL/TLS** certificate management\n✅ **No direct IP exposure** - attackers can't discover your server\n✅ **Outbound-only connections** - server initiates connection to Cloudflare\n✅ **Free for unlimited bandwidth**\n\n### Architecture\n\n```\nUser → Cloudflare Edge → Cloudflare Tunnel → Analytics API (localhost only)\n```\n\nYour server has no publicly accessible ports. Cloudflare Tunnel creates an encrypted, outbound-only connection to Cloudflare's edge network, which then routes HTTPS traffic to your local API server.\n\n### Quick Setup\n\nWe provide automated scripts for easy Cloudflare Tunnel deployment:\n\n```bash\n# 1. Configure firewall (blocks all ports except SSH)\nsudo ./scripts/setup-firewall.sh YOUR_IP_ADDRESS\n\n# 2. Install and configure Cloudflare Tunnel\nsudo ./scripts/setup-cloudflare-tunnel.sh\n\n# 3. Start your API server (listens on localhost only)\nnpm run build\nnode dist/api/index.js\n```\n\n### Deployment Options\n\n**Option A: Direct Cloudflare Tunnel** (Simplest)\n```\nCloudflare → Tunnel → API (localhost:3000)\n```\n\n**Option B: Cloudflare Tunnel + Nginx** (Advanced)\n```\nCloudflare → Tunnel → Nginx (localhost:8080) → API (localhost:3000)\n```\nAdds rate limiting, caching, and additional security headers.\n\n### Complete Documentation\n\nFor full deployment instructions, see:\n- **[CLOUDFLARE_TUNNEL_DEPLOYMENT.md](docs/CLOUDFLARE_TUNNEL_DEPLOYMENT.md)** - Complete step-by-step guide\n- **[ENVIRONMENT_CONFIG.md](docs/ENVIRONMENT_CONFIG.md)** - Environment variable reference\n\n### Cloudflare Tunnel vs Traditional Deployment\n\n| Feature | Cloudflare Tunnel | Traditional Nginx |\n|---------|-------------------|-------------------|\n| Open Ports | SSH only (22) | SSH (22), HTTP (80), HTTPS (443) |\n| SSL Certificates | Automatic | Manual (Let's Encrypt) |\n| DDoS Protection | Included | Requires separate service |\n| IP Exposure | Hidden | Public IP visible |\n| Setup Complexity | Automated scripts | Manual nginx + certbot |\n| Firewall Rules | Minimal | Extensive |\n| Cost | Free | Free (but more complex) |\n\n### Prerequisites\n\n- Cloudflare account (free tier works)\n- Domain managed by Cloudflare DNS\n- Digital Ocean droplet or any VPS\n- Ubuntu 22.04 LTS or later\n\n### Configuration Files\n\nThe Cloudflare Tunnel deployment includes:\n\n- `scripts/setup-cloudflare-tunnel.sh` - Automated tunnel installation\n- `scripts/setup-firewall.sh` - UFW firewall configuration\n- `nginx/cloudflare-tunnel.conf` - Optional nginx config for tunnel\n- `cloudflared-config.template.yml` - Tunnel configuration template\n- `docs/CLOUDFLARE_TUNNEL_DEPLOYMENT.md` - Complete deployment guide\n\n### Monitoring Tunnel Health\n\n```bash\n# Check tunnel status\nsudo systemctl status cloudflared\n\n# View tunnel logs\nsudo journalctl -u cloudflared -f\n\n# Test external access\ncurl https://analytics.weather-mcp.dev/health\n```\n\nYou can also monitor tunnel health in the Cloudflare Zero Trust dashboard.\n\n## Troubleshooting\n\n### Database Connection Issues\n\n```bash\n# Check PostgreSQL is running\ndocker-compose ps postgres\n\n# Check logs\ndocker-compose logs postgres\n\n# Test connection\nPGPASSWORD=$DB_PASSWORD psql -h localhost -U analytics -d analytics\n```\n\n### Queue Issues\n\n```bash\n# Check Redis\ndocker-compose ps redis\n\n# Check queue depth\ndocker-compose exec redis redis-cli LLEN analytics:events\n\n# Clear queue (development only!)\ndocker-compose exec redis redis-cli DEL analytics:events\n```\n\n### Worker Not Processing Events\n\n```bash\n# Check worker logs\ndocker-compose logs worker\n\n# Restart worker\ndocker-compose restart worker\n\n# Check for errors in database\ndocker-compose logs postgres | grep ERROR\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Run tests (`npm test`)\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n### Development Guidelines\n\n- Write tests for all new features\n- Follow existing code style (ESLint + Prettier)\n- Update documentation\n- Ensure all tests pass\n- Add TypeScript types for all functions\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details\n\n## Documentation\n\nComprehensive documentation is included:\n\n### User Documentation\n- **[README.md](README.md)** - This file (project overview and quick start)\n- **[API.md](docs/API.md)** - Complete API reference with examples\n- **[PRIVACY_POLICY.md](PRIVACY_POLICY.md)** - Privacy policy and data handling\n\n### Deployment Documentation\n- **[DEPLOYMENT_GUIDE.md](docs/DEPLOYMENT_GUIDE.md)** - VPS deployment walkthrough (5,500+ words)\n- **[CLOUDFLARE_TUNNEL_DEPLOYMENT.md](docs/CLOUDFLARE_TUNNEL_DEPLOYMENT.md)** - Secure Cloudflare Tunnel deployment guide\n- **[ENVIRONMENT_CONFIG.md](docs/ENVIRONMENT_CONFIG.md)** - Complete environment variable reference\n- **[PRE_DEPLOYMENT_CHECKLIST.md](docs/PRE_DEPLOYMENT_CHECKLIST.md)** - 80+ pre-launch verification items\n- **[OPERATIONS_GUIDE.md](docs/OPERATIONS_GUIDE.md)** - Daily operations and maintenance (4,000+ words)\n\n### Monitoring Documentation\n- **[MONITORING_GUIDE.md](docs/MONITORING_GUIDE.md)** - Complete monitoring guide (7,000+ words)\n- **[POST_LAUNCH_MONITORING.md](POST_LAUNCH_MONITORING.md)** - Post-launch monitoring plan\n\n### Technical Documentation\n- **[TESTING_GUIDE.md](docs/TESTING_GUIDE.md)** - Testing strategy and execution\n- **[TEST_COVERAGE_FINAL_REPORT.md](docs/TEST_COVERAGE_FINAL_REPORT.md)** - Complete coverage analysis\n- **[API_INTEGRATION_GUIDE.md](docs/API_INTEGRATION_GUIDE.md)** - Integration guide for website developers\n- **[TYPESCRIPT_TYPES.md](docs/TYPESCRIPT_TYPES.md)** - TypeScript type definitions guide\n- **[IMPLEMENTATION_PLAN.md](IMPLEMENTATION_PLAN.md)** - Detailed implementation roadmap\n\n### Phase Completion Reports\n- **[PHASE_6_COMPLETION_REPORT.md](PHASE_6_COMPLETION_REPORT.md)** - Deployment \u0026 Infrastructure\n- **[PHASE_7_COMPLETION_REPORT.md](PHASE_7_COMPLETION_REPORT.md)** - Monitoring \u0026 Observability\n- **[PHASE_9_COMPLETION_REPORT.md](PHASE_9_COMPLETION_REPORT.md)** - Launch Preparation\n\n## Links\n\n- **GitHub Organization**: https://github.com/weather-mcp\n- **Weather MCP Server**: https://github.com/weather-mcp/mcp-server\n- **Analytics Server**: https://github.com/weather-mcp/analytics-server\n- **Website**: https://github.com/weather-mcp/website\n- **Public Dashboard**: https://weather-mcp.dev/dashboard *(coming soon)*\n\n## Support\n\nFor issues and questions:\n- **Analytics Server Issues**: https://github.com/weather-mcp/analytics-server/issues\n- **MCP Server Issues**: https://github.com/weather-mcp/mcp-server/issues\n- **General Questions**: https://github.com/weather-mcp/.github/discussions\n\n---\n\n**Status**: ✅ Production Ready (Phase 9 Complete)\n\n**Last Updated**: 2025-01-13\n**Version**: 1.0.0\n**Test Coverage**: 86-100% on critical modules (266 tests passing)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweather-mcp%2Fanalytics-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweather-mcp%2Fanalytics-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweather-mcp%2Fanalytics-server/lists"}