@feedmob/sensor-tower-reporting
v0.1.8
Published
MCP server for sensor-tower API
Downloads
100
Readme
Sensor Tower Reporting MCP Server
Deprecated
This local stdio MCP server is deprecated. Use the hosted SensorTower MCP endpoint for new installs and migrate existing clients:
https://insights-mcp.feedmob.com/sensortowerThe configuration examples below are retained for legacy/local development only.
Legacy Install with Claude Desktop
curl -fsSL https://raw.githubusercontent.com/feed-mob/fm-mcp-servers/main/scripts/install.sh | bash -s -- sensor-tower-reportingPin a specific release:
FM_MCP_INSTALL_REF=v1.0.0 \
curl -fsSL https://raw.githubusercontent.com/feed-mob/fm-mcp-servers/v1.0.0/scripts/install.sh | bash -s -- sensor-tower-reportingThis MCP server provides legacy tools to interact with the Sensor Tower API for mobile app intelligence and market data.
Features
Tools:
get_app_metadata: Fetch app metadata including name, publisher, categories, description, screenshots, and ratingsget_top_in_app_purchases: Fetch top in-app purchases for iOS appsget_compact_sales_report_estimates: Get download and revenue estimates in compact format (revenues in cents)get_active_users: Fetch active user estimates (DAU/WAU/MAU) by country and dateget_category_history: Get detailed category ranking history for appsget_category_ranking_summary: Fetch today's category ranking summaryget_network_analysis: Get impressions share of voice (SOV) time seriesget_network_analysis_rank: Fetch network analysis ranking dataget_retention: Get app retention data (day 1 to day 90)get_downloads_by_sources: Fetch app downloads by sources (organic, paid, browser)find_apps_by_metric_threshold: Discover apps exceeding a download/revenue threshold over a given time period and geographyget_api_usage: Return the latest observedx-api-usage-limitandx-api-usage-countheaders, refreshing them with a lightweight Sensor Tower request if the current process has no cached values yet
Built-in API Safeguards:
- Shared request client for all Sensor Tower endpoints
- Default request pacing of
5requests per second to stay under the documented6 req/scap - Monthly quota tracking via
x-api-usage-limitandx-api-usage-count - Automatic retries for
429,502,503, and504 - Quota warnings and near-exhaustion blocking before the monthly limit is fully depleted
Data Files:
data/category_ids.json: Category ID reference for iOS and Androiddata/country_ids.json: Country code reference
Setup
Install dependencies:
npm installConfigure environment variables: Create a
.envfile with the following variables:AUTH_TOKEN=your_sensor_tower_auth_token SENSOR_TOWER_BASE_URL=https://api.sensortower.com SENSOR_TOWER_REQUESTS_PER_SECOND=5 SENSOR_TOWER_MONTHLY_LIMIT=100000 SENSOR_TOWER_USAGE_WARN_THRESHOLD=0.2 SENSOR_TOWER_USAGE_BLOCK_THRESHOLD=0.05 SENSOR_TOWER_MAX_RETRIES=3Build the server:
npm run build
Running the Server
To run the server directly for testing:
npm startFor development with hot reload:
npm run devUsage with Claude Desktop
- Make sure you have installed and updated to the latest version of Claude for Desktop.
- Open the Claude for Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
- Add the Sensor Tower Reporting MCP server to the configuration:
NPX
{
"mcpServers": {
"sensor-tower-reporting": {
"command": "npx",
"args": ["-y", "@feedmob/sensor-tower-reporting"],
"env": {
"AUTH_TOKEN": "your_sensor_tower_auth_token",
"SENSOR_TOWER_BASE_URL": "https://api.sensortower.com"
}
}
}
}Local Development
{
"mcpServers": {
"sensor-tower-reporting": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/sensor-tower-reporting",
"env": {
"AUTH_TOKEN": "your_sensor_tower_auth_token",
"SENSOR_TOWER_BASE_URL": "https://api.sensortower.com"
}
}
}
}API Reference
App Metadata
- Platform Support: iOS, Android
- Limits: Maximum 100 app IDs per request
- Returns: App name, publisher, categories, description, screenshots, ratings
Sales & Revenue Data
- Compact Sales Report: Download and revenue estimates with flexible filtering
- Revenue Format: All revenues returned in cents
- Filtering: By app IDs, publisher IDs, unified IDs, or categories
User Analytics
- Active Users: DAU/WAU/MAU estimates by country and time period
- Retention: Day 1 to day 90 retention rates with baseline comparison
- Limits: Maximum 500 app IDs for active users and retention
Ranking & Category Data
- Category History: Detailed ranking history by category and chart type
- Category Summary: Current ranking summary for specific apps
- Hourly Rankings: Available for iOS apps
Advertising Intelligence
- Network Analysis: Share of voice (SOV) for advertising networks
- Network Rankings: Ranking data across countries and networks
- Downloads by Sources: Organic vs paid download attribution
Market Research
- Find Apps by Metric Threshold: Discover apps exceeding a download or revenue threshold in a given time range, category, and geography. OS defaults to iOS when not specified.
Error Handling
The server includes comprehensive error handling with specific error types:
ConfigurationError: Missing or invalid configurationSensorTowerApiError: API-related errors with detailed messages- Input validation using Zod schemas for all parameters
- Retries with backoff for
429,502,503, and504 - Shared quota tracking so tool responses can include
api_usagemetadata
Environment Variables
| Variable | Required | Description | Default |
|----------|----------|-------------|---------|
| AUTH_TOKEN | Yes | Sensor Tower API authentication token | - |
| SENSOR_TOWER_BASE_URL | No | Sensor Tower API base URL | https://api.sensortower.com |
| SENSOR_TOWER_REQUESTS_PER_SECOND | No | Shared in-process request pacing. Keep this at or below 6; defaults to 5 for safety. | 5 |
| SENSOR_TOWER_MONTHLY_LIMIT | No | Fallback monthly quota used before API usage headers are observed. | 100000 |
| SENSOR_TOWER_USAGE_WARN_THRESHOLD | No | Warning threshold as a fraction of the monthly quota remaining. | 0.2 |
| SENSOR_TOWER_USAGE_BLOCK_THRESHOLD | No | Hard stop threshold as a fraction of the monthly quota remaining. Must be lower than the warn threshold. | 0.05 |
| SENSOR_TOWER_MAX_RETRIES | No | Max retries for retryable Sensor Tower responses (429, 502, 503, 504). | 3 |
Rate Limit Strategy
- All outgoing Sensor Tower requests now flow through a shared HTTP client, so the same limits apply across every MCP tool.
- The client paces requests at
5 req/sby default to stay below Sensor Tower's documented6 req/scap. - Monthly usage is refreshed from Sensor Tower's response headers whenever available.
- When remaining monthly quota drops below the warning threshold, tool responses include an
api_usage.warning. - When remaining monthly quota drops below the block threshold, new requests are rejected instead of fully exhausting the account.
get_api_usagereturns cached usage headers when available, and otherwise performs one lightweight request to refresh the latest usage headers.
Development
Scripts
npm run build: Compile TypeScript and make executablesnpm run watch: Watch mode for developmentnpm run prepare: Prepare package for publishing
Testing
Use the MCP inspector for manual testing:
npm run inspectLicense
MIT
