npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@barush/sensor-tower-mcp

v1.0.1

Published

MCP server that exposes the Sensor Tower App Analysis API as AI-consumable tools

Readme

Sensor Tower MCP Server

An MCP server that exposes the Sensor Tower API as AI-consumable tools. 90+ endpoints across 19 categories — app downloads, revenue, demographics, advertising, SDK insights, ASO, web analytics, and more.

Prerequisites

Setup

Add the server to your MCP client config. For Cursor, edit .cursor/mcp.json. For Claude Desktop, edit claude_desktop_config.json.

Local (stdio)

No build or clone needed — run directly via npx:

{
  "mcpServers": {
    "sensor-tower": {
      "command": "npx",
      "args": ["-y", "@barush/sensor-tower-mcp"],
      "env": {
        "SENSOR_TOWER_API_KEY": "your_api_key_here"
      }
    }
  }
}

Alternatively, if you have the repo cloned locally:

{
  "mcpServers": {
    "sensor-tower": {
      "command": "node",
      "args": ["<path-to-repo>/build/index.js"],
      "env": {
        "SENSOR_TOWER_API_KEY": "your_api_key_here"
      }
    }
  }
}

Remote (HTTP)

Connect to a running instance. No local build needed — just provide the server URL and your API key:

{
  "mcpServers": {
    "sensor-tower": {
      "url": "http://your-server:3000/mcp",
      "headers": {
        "Authorization": "Bearer your_api_key_here"
      }
    }
  }
}

Deploying the Remote Server

For shared or hosted deployments, run the server in HTTP mode. Each client sends their own Sensor Tower API key via the Authorization header, enabling multi-user access.

With Docker (recommended)

docker run -p 3000:3000 ghcr.io/elad-bar/sensor-tower-mcp:main

Or using Docker Compose:

docker compose up

To use a different port:

PORT=8080 docker compose up

Without Docker

npm install && npm run build
node build/index.js --transport http

The server listens on POST /mcp (port 3000 by default). GET /mcp and DELETE /mcp return 405 (stateless mode — no server-side sessions).

Available Tools

App Overview

| Tool | Description | |------|-------------| | search_entities | Search for apps and publishers by name, description, app ID, or Unified ID | | apps | Retrieve app metadata (name, publisher, categories, icon, etc.) | | top_in_app_purchases | Retrieve top in-app purchases for requested apps |

Downloads & Revenue

| Tool | Description | |------|-------------| | sales_report_estimates | Download and revenue estimates by country and date |

Active Users

| Tool | Description | |------|-------------| | usage_active_users | Active user estimates (DAU/WAU/MAU) per country and date |

Category Rankings

| Tool | Description | |------|-------------| | category_history | Historical ranking for an app by category and chart type | | category_ranking_summary | Today's category ranking summary for an app |

Advertising

| Tool | Description | |------|-------------| | creatives | Creatives for an advertising app with SOV and top publishers | | impressions | SOV time series for requested apps | | impressions_rank | Ranks by country, network, and date for requested apps |

Acquisition & Churn

| Tool | Description | |------|-------------| | app_analysis_retention | Retention from day 1 to day 90 with baseline | | download_channels | Download source breakdown (organic, paid, search, browser) | | churn_analysis | Churn rate and active user breakdown metrics | | churn_analysis_cohorts | Available churn analysis cohorts | | cohort_retention | Cohort retention from panel users | | cohort_retention_cohorts | Available cohort retention cohorts | | getRetentionMetrics | Retention metrics (daily/weekly/monthly periods) |

Demographics

| Tool | Description | |------|-------------| | app_analysis_demographics | Demographic breakdown by gender and age range |

Session Metrics

| Tool | Description | |------|-------------| | session_metrics_timeseries | Session metrics time series for iOS/Android apps | | unified_session_metrics_timeseries | Session metrics time series for unified apps |

Engagement

| Tool | Description | |------|-------------| | engagement_insights_cohort_session_metrics | App engagement trends from panel users | | engagement_insights_cohorts | Available engagement insights cohorts | | time_of_day | Time of day usage data from panel users | | time_of_day_cohorts | Available time of day cohorts | | power_user_curve | Power user curve from panel users | | power_user_curve_cohorts | Available power user curve cohorts |

Geographic Usage

| Tool | Description | |------|-------------| | metro_active_users | Active users by metropolitan area | | state_active_users | Active users by US state |

Install Metrics

| Tool | Description | |------|-------------| | getInstallMetrics | Install base, penetration, and engagement metrics |

App Updates

| Tool | Description | |------|-------------| | app_update_timeline | Detailed app update history (version, summary, screenshots) | | version_history | Version history with release notes |

Cross-App Usage

| Tool | Description | |------|-------------| | app_overlap | Apps that users of a given app are more likely to use | | cohort_engagement_cohort_session_metrics | Cross-app engagement trends from panel users | | cohort_engagement_cohorts | Available cross-app engagement cohorts |

SDK Insights

| Tool | Description | |------|-------------| | getSDKAnalysis | Timeseries metrics for SDKs | | getSDKOverviewApps | Apps with a particular SDK installed or uninstalled | | sdk_overview | Metadata and performance metrics for SDKs |

Market Analysis

| Tool | Description | |------|-------------| | ranking | Top ranking apps by category, chart type, and country | | top_apps | Top apps by download and revenue estimates | | top_apps_active_users | Top apps by active users (DAU/WAU/MAU) | | top_publishers | Top publishers by downloads and revenue | | store_summary | Aggregated download and revenue estimates for store categories | | top_advertisers | Top advertisers or publishers by Share of Voice | | top_advertisers_search | Search for rank of an advertiser or publisher | | top_creatives | Top creatives by Share of Voice | | games_breakdown | Aggregated download and revenue for game categories |

Store Marketing

| Tool | Description | |------|-------------| | aso_keyword_research | Keyword summary with traffic, difficulty, and ranking apps | | aso_timeseries | ASO keyword timeseries metrics | | aso_rank_overview | Keyword rank distribution over time | | aso_top_keywords | Top keywords for an app | | featured_apps | Featured apps and games in the App Store | | featured_creatives | Featured creatives for an app | | featured_impacts | Featured occurrence and download impact | | featured_today_stories | Featured Today stories from the App Store | | getRatingsMetrics | Rating metrics (incremental or cumulative) | | get_reviews | App reviews with filtering and pagination | | getReviewsByRating | Review metrics broken down by rating | | getReviewsBySentiment | Review metrics broken down by sentiment | | getReviewsByTag | Review metrics broken down by tag | | search_ads_apps | Apple Search Ads analytics for your apps | | search_ads_terms | Apple Search Ads metrics by source type | | search_ads_history | Apple Search Ads historical data |

Custom Fields

| Tool | Description | |------|-------------| | app_ids_by_category | App IDs by release/updated date range and category | | publisher_apps | Apps for a particular publisher | | unified_publisher_apps | Unified publisher and all apps across platforms | | unified_apps | iOS/Android app IDs for unified apps | | unified_publishers | iOS/Android publisher IDs for unified publishers | | tags_for_apps | Global or custom field tag values for apps | | apps_by_tag | Apps with a particular tag value | | custom_field_list | Custom fields and tags with app counts | | add_tag_for_app | Add a tag value to a custom field for an app | | edit_tag | Edit a tag value for an app | | remove_tag_for_app | Remove a tag value from an app | | change_all_values_matching | Bulk change tag values in a custom field | | remove_custom_field | Remove a custom field entirely | | create_custom_fields_filter | Create a custom fields filter | | get_custom_fields_filter | Retrieve a custom fields filter by ID | | get_custom_fields_filter_values | Available fields and values for filters |

Your Metrics

| Tool | Description | |------|-------------| | my_app_analytics | App Store analytics for connected apps | | my_sources_metrics | Source type metrics for connected apps | | my_sales_reports | Downloads and revenue sales reports for connected apps | | unified_sales_reports | Unified sales reports across platforms | | api_usage | Sensor Tower API usage metrics |

Web Insights

| Tool | Description | |------|-------------| | website_device_overlap | Visitor distribution across devices | | website_duration | Visit duration metrics | | top_websites | Top websites by traffic | | website_visits | Visit metrics (unique visitors, page views) | | website_paths | Path metrics for user journey analysis | | website_traffic_channels | Traffic channel breakdown | | website_traffic_flow | Traffic flow (referral and destination patterns) | | website_top_paths | Top paths by traffic | | gen_ai_citations | Gen AI citation metrics for websites |

Configuration

| Variable | Required | Default | Description | |---|---|---|---| | SENSOR_TOWER_API_KEY | stdio only | — | Sensor Tower API key (in HTTP mode, clients send it via Authorization header) | | PORT | No | 3000 | HTTP server port (only used with --transport http) |


Development

Building from source

Requires Node.js >= 20.

npm install
npm run build

Scripts

npm run build       # Compile TypeScript
npm run typecheck   # Type-check without emitting
npm start           # Build and start (stdio mode)

Docker build (local)

docker build -t sensor-tower-mcp .
docker run -p 3000:3000 sensor-tower-mcp

Pre-built images are published to ghcr.io/elad-bar/sensor-tower-mcp on every push to main.