Data-as-a-Service API for maintainer concentration, dormancy reactivation, and anomalous spike risk signals across npm and PyPI package ecosystems
Server has 4 tools with clear verb-noun naming and detailed descriptions (avg 180 chars, within baseline 194). All tools have input schemas with type definitions. However, output schemas are not documented in the visible code, parameter descriptions lack constraint details (ranges, enums, formats), and error handling lacks recovery guidance. Tool 4 (lemon_squeezy_webhook) has a complex nested schema that is difficult to parse. No tool annotations (readOnlyHint/destructiveHint) present despite clear risk profiles.
Synthesizes raw telemetry into composite risk indices: Maintainer Concentration Index (MCI), Dormancy Reactivation Index (DRI), and Anomalous Spike Index (ASI). Returns analytical indices alongside raw registry signals.
Returns historical telemetry snapshots and computed indices, newest first. Supports pagination with limit parameter (1-100, defaults to 30). One snapshot is retained per ingest cycle.
Returns the latest unweighted telemetry row for a target package. Supports scoped npm packages. Handles cache hits, background revalidation for stale entries, and synchronous on-demand fetches with 5.0s timeout backpressure.
Cryptographic webhook receiver for Lemon Squeezy subscription events. Strictly verifies HMAC-SHA256 signatures to allocate API tokens securely. Handles subscription_created, subscription_payment_success, subscription_updated, subscription_cancelled, and subscription_expired events.
Output schemas not documented. Tools return PackageRiskMetricResponse and AdvancedPackageRiskAnalyticsResponse but response field structure is not visible in source. LLMs cannot plan downstream tool calls or extract required fields without documented return types.
Parameter descriptions lack constraint details. 'package_name' accepts 'ecosystem/name' format but no regex pattern, length limits, or valid ecosystem enum provided. 'limit' parameter in get_package_risk_history states range (1-100) but lacks guidance on default behavior or performance implications.
Error handling lacks recovery guidance. Code raises HTTPException with generic messages ('Package identity does not exist') but does not suggest next steps (e.g., 'Try search_packages() with partial name'). Typosquat detection returns similarity score but no actionable guidance for LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Tool annotations missing. get_package_risk_metrics and get_package_risk_analytics are read-only (no side effects) but lack readOnlyHint annotation. lemon_squeezy_webhook is destructive (allocates API tokens) but lacks destructiveHint annotation. Agents cannot distinguish safe from risky tools.
lemon_squeezy_webhook schema is deeply nested with 'meta' and 'data' objects containing 'attributes' sub-object. No description of which fields are required vs optional, no enum for event_name values, no validation rules for HMAC verification. Complex nested structure invites LLM misuse.