Otter Music is a cross-platform music player application that aggregates multiple music sources (NetEase, QQ Music, Kuwo, Kugou, Migu, Bilibili, etc.) into a unified interface. It features music search, playback, playlist/favorites management, lyrics display, sleep timer, offline downloading, and cross-device synchronization via Cloudflare KV. The architecture combines a React/Vite frontend with Zustand state management, a Cloudflare Workers/Hono backend for API proxying and sync, and Capacitor for native Android integration. Key entry points include src/main.tsx (frontend root), functions/app.ts (backend), and android/app/src/main/java/com/otterhub/music/MainActivity.java (native). Data flows involve unified music API calls to platform-specific providers, audio URL resolution with caching, encrypted IndexedDB persistence for user state, and sync via Cloudflare KV. External dependencies include numerous music APIs, Capacitor, React, Zustand, Tailwind CSS, and Radix UI primitives.
This repository implements a Model Context Protocol (MCP) server and CLI for searching, downloading, and reading academic papers across ~20 scholarly platforms (arXiv, PubMed, Semantic Scholar, CrossRef, OpenAlex, Google Scholar, etc.). It is primarily an application—a Python package distributed via PyPI—that exposes two entry points: an MCP server (stdio-based, compatible with Claude Desktop and other MCP clients) and a command-line interface. The architecture follows a clean two-layer design: a unified tool layer (search_papers, download_with_fallback) that orchestrates concurrent multi-source searches with deduplication, and a modular connector layer where each platform is implemented as a self-contained class inheriting from a common PaperSource abstract base. The system emphasizes a 'free-first' strategy, relying on open public APIs and optional API keys for enhanced access. It includes a fallback chain for PDF downloads (native source → OA repositories → Unpaywall → Sci-Hub) and supports full-text extraction via pypdf. The codebase is well-structured with consistent patterns (Paper dataclass, env config, retry/backoff), comprehensive test coverage (unit and e2e), and CI/CD publishing. However, some connectors are skeletons (IEEE, ACM) or not wired (ChemRxiv), and HTML scraping components are fragile to upstream changes. The last commit date is anomalously in the future (2026-08-17), but the repository shows active issue triage and community engagement.