AppDataLayer MCP Server
Analyzes app reviews, metadata, and keyword rankings from the Apple App Store, offering features like sentiment analysis, semantic topic search, and competitive intelligence.
Analyzes app reviews, metadata, and keyword rankings from the Google Play Store, offering features like sentiment analysis, semantic topic search, and competitive intelligence.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AppDataLayer MCP ServerCompare review sentiment for Spotify and Apple Music"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
appdatalayer-mcp
Open-source TypeScript SDK for the AppDataLayer MCP Server — the App Intelligence Query Engine powered by the Model Context Protocol.
Analyze 1B+ app reviews across Google Play and the Apple App Store. Semantic topic search, sentiment analysis, keyword rankings, competitive analysis, and time-series forecasting — all through a single typed API.
Installation
npm install appdatalayer-mcpQuick Start
One-command setup
The fastest way to get started — authenticates via browser and auto-configures your AI agent:
npx appdatalayer-mcp setupThis detects installed agents (Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Antigravity, OpenCode), opens a browser for login, and writes the correct config file for each.
You can also target a specific agent:
npx appdatalayer-mcp setup --agent cursor
npx appdatalayer-mcp setup --api-key sk_live_...As a TypeScript/JavaScript SDK
import { AppDataLayerClient } from "appdatalayer-mcp";
const client = new AppDataLayerClient({ apiKey: "sk_live_..." });
// Get weekly report for an app
const report = await client.call("get_weekly_report", { app_id: "com.spotify.music" });
// Ask about your app in natural language (Pro)
const answer = await client.call("ask_about_my_app", {
app_id: "com.spotify.music",
question: "Are users complaining about battery drain?",
});
// Query live data — app overview
const app = await client.call("query_live_data", {
query_type: "app_overview",
app_id: "com.instagram.android",
});
// Query live data — analyze reviews
const reviews = await client.call("query_live_data", {
query_type: "analyze_reviews",
app_id: "com.spotify.music",
dimensions: ["sentiment", "topic"],
days: 30,
});
// Query live data — forecast with auto-fetch
const forecast = await client.call("query_live_data", {
query_type: "forecast",
metric: "review_count",
app_id: "com.spotify.music",
horizon: 7,
});
// Query live data — compare apps
const comparison = await client.call("query_live_data", {
query_type: "compare_apps",
app_ids: ["com.spotify.music", "com.apple.music"],
days: 30,
});
// Manage tracking — track an app
await client.call("manage_tracking", {
action: "track_app",
app_id: "com.spotify.music",
provider: "google-play",
});
// Get alerts and anomalies
const alerts = await client.call("get_alerts", { app_id: "com.spotify.music" });
// Check usage and quota
const usage = await client.call("manage_credentials", { action: "usage" });
await client.disconnect();As an MCP Server for LLM Agents
Use AppDataLayer directly in Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Antigravity, or OpenCode:
# Auto-detect and configure all installed agents
npx appdatalayer-mcp setup
# Or print config JSON for manual setup
npx appdatalayer-mcp config sk_live_... --agent cursorManual configuration
Client | Config File | Key Format |
Claude Code |
|
|
Claude Desktop |
|
|
Cursor |
|
|
Windsurf |
|
|
VS Code (Copilot) |
|
|
Antigravity |
|
|
OpenCode |
|
|
Example config (Cursor format):
{
"mcpServers": {
"appdatalayer": {
"url": "https://mcp.appdatalayer.com/mcp",
"headers": {
"APPDATALAYER_API_KEY": "sk_live_..."
}
}
}
}As a Standalone MCP Server
Run a local MCP server that proxies all tools from the hosted backend:
# stdio transport (for agents that spawn a subprocess)
npx appdatalayer-mcp serve --api-key sk_live_...
# HTTP transport (for network-based setups)
npx appdatalayer-mcp serve --transport http --port 3100 --api-key sk_live_...Available Tools
The MCP server exposes 6 tools:
1. get_weekly_report
Get the latest pre-generated weekly report for an app. Includes health score, review sentiment & trends, top topics, keyword rankings, store performance, competitive analysis, anomaly alerts, and 7-day forecast.
await client.call("get_weekly_report", {
app_id: "com.spotify.music",
});2. ask_about_my_app
Ask a natural language question about your app's reviews. Pro feature.
await client.call("ask_about_my_app", {
app_id: "com.spotify.music",
question: "What do users love most?",
days: 90, // optional, default 90
provider: "google-play", // optional
country: "us", // optional
version: "9.0.0", // optional
});3. get_alerts
Get anomalies detected in the latest report (rating drops, review spikes, sentiment shifts) and active webhook status.
await client.call("get_alerts", {
app_id: "com.spotify.music", // optional — omit for all apps
});4. manage_tracking
Manage what you track. 14 actions:
Action | Description | Required params |
| List tracked apps | — |
| Start tracking an app |
|
| Stop tracking |
|
| List tracked keywords | — |
| Track a keyword's ranking |
|
| Stop tracking a keyword |
|
| Track multiple keywords |
|
| List alert webhooks | — |
| Set up an alert |
|
| Remove an alert |
|
| Enable/disable an alert |
|
| Create custom scrape job (Pro) |
|
| Enable/disable a scrape job |
|
| Set up weekly report generation |
|
// Track an app across all regions (Pro)
await client.call("manage_tracking", {
action: "track_app",
app_id: "com.spotify.music",
provider: "google-play",
});
// Create a webhook alert
await client.call("manage_tracking", {
action: "create_webhook",
app_id: "com.spotify.music",
trigger_type: "sentiment_drop",
webhook_url: "https://hooks.slack.com/...",
check_frequency: "daily",
});
// Schedule weekly reports
await client.call("manage_tracking", {
action: "schedule_report",
app_id: "com.spotify.music",
});5. manage_credentials
Manage store credentials and account. 5 actions:
Action | Description |
| List saved Apple/Google credentials |
| Which stores you have credentials for |
| Save new credential (AES-256-GCM encrypted) |
| Update an existing credential |
| Check API usage, quota, plan limits |
// Check usage
await client.call("manage_credentials", { action: "usage" });
// Add Google Play credential
await client.call("manage_credentials", {
action: "add",
provider: "google_play",
label: "My Production App",
app_identifier: "com.example.myapp",
service_account_json: '{ "type": "service_account", ... }',
});
// Add Apple credential
await client.call("manage_credentials", {
action: "add",
provider: "apple",
label: "My iOS App",
app_identifier: "com.example.myapp",
issuer_id: "...",
key_id: "...",
p8_key: "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----",
});6. query_live_data
Power tool for custom queries beyond the weekly report. 12 query types:
Query Type | Description | Key params |
| App metadata, scores, installs, sentiment summary |
|
| Aggregate reviews by dimensions |
|
| Per-version breakdown, regression detection (Pro) |
|
| Keyword position over time |
|
| Store top charts |
|
| Competitive set |
|
| Store autocomplete |
|
| Side-by-side comparison (2-5 apps) |
|
| Predict future metric values |
|
| Search/explore review topics |
|
| Live data from stores (not from DB) |
|
| Inspect scraping job status |
|
// Analyze reviews by sentiment and topic
await client.call("query_live_data", {
query_type: "analyze_reviews",
app_id: "com.spotify.music",
dimensions: ["sentiment", "topic"],
days: 30,
});
// Forecast keyword ranking
await client.call("query_live_data", {
query_type: "forecast",
metric: "keyword_ranking",
app_id: "com.spotify.music",
keyword: "music streaming",
horizon: 14,
});
// Search topics
await client.call("query_live_data", {
query_type: "topics",
topic_action: "search",
query: "app crashes and freezes",
});
// Fetch real-time data from store
await client.call("query_live_data", {
query_type: "fetch_realtime",
provider: "google-play",
feature: "app_detail",
app_id: "com.instagram.android",
});
// Version analysis with regression detection (Pro)
await client.call("query_live_data", {
query_type: "version_analysis",
app_id: "com.spotify.music",
detect_regression: true,
days: 90,
});API Reference
AppDataLayerClient
const client = new AppDataLayerClient({
apiKey: string; // Required — your API key
endpoint?: string; // Default: "https://mcp.appdatalayer.com/mcp"
timeout?: number; // Default: 30000ms
});The client auto-connects on first tool call. You can also call await client.connect() explicitly.
Return Type
All methods return ToolCallResult<T>:
interface ToolCallResult<T> {
content: { type: string; text: string }[]; // Raw MCP content
isError?: boolean; // True if the tool returned an error
data: T | null; // Parsed JSON data (null if error)
}Raw Access
// Call any tool by name
const result = await client.call("tool_name", { ...args });
// List all available tools
const tools = await client.listTools();
// List all available resources
const resources = await client.listResources();
// Read a resource
const schema = await client.readResource("appdatalayer://schemas/all");generateMcpConfig
import { generateMcpConfig } from "appdatalayer-mcp";
const config = generateMcpConfig(
apiKey: string,
endpoint?: string // Default: "https://mcp.appdatalayer.com/mcp"
);CLI Reference
# Interactive setup — browser auth + auto-configure agents
npx appdatalayer-mcp setup
npx appdatalayer-mcp setup --agent cursor
npx appdatalayer-mcp setup --api-key sk_live_...
# Print config JSON for manual setup
npx appdatalayer-mcp config <api-key> --agent <name>
# Run as standalone MCP server
npx appdatalayer-mcp serve --api-key <key>
npx appdatalayer-mcp serve --transport http --port 3100Supported agents: claude-code, claude-desktop, cursor, windsurf, vscode, antigravity, opencode
Configuration
Env Variable | Description |
| Your AppDataLayer API key |
Examples
See the examples/ directory:
basic-usage.ts— All major SDK featuresgenerate-config.ts— Generate LLM agent config
Data Coverage
Metric | Value |
Reviews | 1B+ |
Apps | 250K+ |
Topics | 1M+ clusters |
Countries | 44 |
Stores | Google Play, Apple App Store |
License
MIT — AppDataLayer
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/appdatalayer/mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server