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-mcp
Quick Start
As a TypeScript/JavaScript SDK
import { AppDataLayerClient } from "appdatalayer-mcp";
const client = new AppDataLayerClient({ apiKey: "sk_live_..." });
// Get app metadata
const app = await client.getAppOverview("com.instagram.android");
console.log(app.data?.title, app.data?.score);
// Analyze review sentiment
const reviews = await client.analyzeReviews({
app_id: "com.spotify.music",
dimensions: ["sentiment", "topic"],
days: 30,
});
// Semantic topic search
const topics = await client.searchTopics("crashes and bugs");
// Compare apps head-to-head
const comparison = await client.compareApps({
app_ids: ["com.spotify.music", "com.apple.music"],
});
// Forecast review volume
const forecast = await client.forecastMetric({
series: [100, 120, 115, 130, 128, 145, 142, 160, 155, 170],
horizon: 7,
});
await client.disconnect();
As an MCP Server for LLM Agents
Use AppDataLayer directly in Claude Desktop, Cursor, Windsurf, or any MCP-compatible AI agent:
import { generateMcpConfig } from "appdatalayer-mcp";
const config = generateMcpConfig("sk_live_...");
console.log(JSON.stringify(config, null, 2));
Paste the output into your agent's config file:
| Client | Config File |
|---|---|
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Cursor | .cursor/mcp.json |
| Windsurf | ~/.windsurf/mcp.json |
| VS Code | .vscode/mcp.json |
Generated config:
{
"mcpServers": {
"appdatalayer": {
"url": "https://mcp.appdatalayer.com/mcp",
"headers": {
"APPDATALAYER_API_KEY": "sk_live_..."
}
}
}
}
Available Tools
The SDK provides typed methods for all 22 MCP tools:
Data Querying
| Method | Description |
|---|---|
getAppOverview(appId) |
App metadata: title, developer, score, installs, rating histogram |
analyzeReviews(input) |
Aggregate reviews by day/week/month/sentiment/country/score/topic |
getKeywordRankings(input) |
Track app ranking for a search keyword over time |
getTopCharts(input?) |
Latest top charts (free, paid, grossing, new) |
getSimilarApps(appId) |
Apps similar/related to a given app |
getSearchSuggestions(input) |
Autocomplete suggestions from app stores |
getGlobalStats() |
Platform totals: apps tracked, reviews count |
getReviewsByTopics(input) |
Actual review text filtered by topic IDs |
compareApps(input) |
Head-to-head comparison of 2-5 apps |
getTopicTrend(input) |
Track topic volume and sentiment changes over time |
Topic Intelligence
| Method | Description |
|---|---|
resolveTopics(ids) |
Convert topic IDs → human-readable labels |
searchTopics(query) |
Semantic search over 1M+ review topics |
findAppsByTopics(input) |
Find apps at the intersection of two topic sets |
Forecasting
| Method | Description |
|---|---|
forecastMetric(input) |
Predict future values using Google TimesFM 2.5 |
Scraping Operations
| Method | Description |
|---|---|
getScrapeJobsOverview() |
Overview of all scraping jobs by type |
listScrapeJobs(input?) |
List and filter individual scrape jobs |
getFailedJobs(input?) |
Get failed/dead jobs with failure reasons |
getJobScheduleStatus(input?) |
Get overdue jobs |
Webhooks
| Method | Description |
|---|---|
listWebhooks() |
List all webhooks for the authenticated user |
createWebhook(input) |
Create a webhook alert rule |
deleteWebhook(id) |
Delete a webhook |
toggleWebhook(id, active) |
Enable/disable a webhook |
Raw Access
| Method | Description |
|---|---|
call(toolName, args) |
Call any MCP tool by name |
listTools() |
List all available tools |
listResources() |
List all available resources |
readResource(uri) |
Read a resource (e.g. table schemas) |
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
});
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)
}
generateMcpConfig
import { generateMcpConfig } from "appdatalayer-mcp";
const config = generateMcpConfig(
apiKey: string,
endpoint?: string // Default: "https://mcp.appdatalayer.com/mcp"
);
Configuration
| Env Variable | Description |
|---|---|
APPDATALAYER_API_KEY |
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