@praise25/appsflyer-mcp-server
v1.0.1
Published
Read-only MCP server exposing AppsFlyer reporting, fraud, cohort, SKAN, and OneLink data as tools for LLM clients
Maintainers
Readme
AppsFlyer MCP Server
A read-only Model Context Protocol server that exposes your AppsFlyer marketing/attribution data as tools for LLM clients (Claude Desktop, Claude Code, Cursor, etc.). Ships 20 tools.
Ask questions like "how many non-organic installs did we get from Facebook in the US last week?" or "show me installs Protect360 blocked as fraud yesterday" directly from your chat client, no dashboard navigation.
Scope: read-only. This server fetches reports; it does not create/update/delete anything (no OneLink editing, no event posting, no config writes). See
docs/PRD.md.
Tools (17)
| Category | Tools |
|---|---|
| Raw Data | get_raw_installs, get_raw_in_app_events, get_raw_uninstalls, get_organic_installs |
| Aggregate | get_aggregate_daily_report, get_aggregate_geo_report |
| Master Report | get_master_report (requires Master API subscription) |
| Cohort / LTV | get_cohort_report |
| Fraud (Protect360) | get_blocked_installs, get_blocked_in_app_events, get_post_attribution_fraud |
| SKAdNetwork | get_skan_performance_report, get_skan_postback_arrival_report, get_skan_cv_schema |
| OneLink | get_onelink, get_onelink_qr_code |
| Push API | get_push_api_config |
| Audiences | get_account_partner_connections, get_audience_connections, get_account_split_syncs |
Audiences note: AppsFlyer's Audiences External API has no "list all audiences" endpoint — its read surface is partner connections and split syncs.
get_account_partner_connectionsis the practical discovery entry point; per-audience calls need a numeric audience id from the dashboard.
Credentials
You need one credential: an AppsFlyer Master API v2 token (a Bearer token).
- In the AppsFlyer dashboard, open the account menu → Security Center → API tokens.
- Generate / copy your API V2 token.
- Provide it to the server via the
APPSFLYER_API_TOKENenvironment variable.
Note: AppsFlyer can revoke tokens server-side (all V2 tokens issued before 2026-03-10 were revoked in a security action). If tool calls start returning auth errors, regenerate the token, it's not a bug in this server.
Setup
Build from source
npm install
npm run buildConfigure your MCP client
Add to your client's MCP server config (e.g. Claude Desktop's claude_desktop_config.json):
{
"mcpServers": {
"appsflyer": {
"command": "node",
"args": ["/absolute/path/to/appsflyer-mcp-server/dist/index.js"],
"env": {
"APPSFLYER_API_TOKEN": "your-v2-bearer-token",
"APPSFLYER_DEFAULT_APP_ID": "id123456789"
}
}
}
}Once published to npm, this simplifies to:
{
"mcpServers": {
"appsflyer": {
"command": "npx",
"args": ["-y", "appsflyer-mcp-server"],
"env": { "APPSFLYER_API_TOKEN": "your-v2-bearer-token" }
}
}
}Environment variables
| Variable | Required | Description |
|---|---|---|
| APPSFLYER_API_TOKEN | ✅ | Master API v2 Bearer token |
| APPSFLYER_DEFAULT_APP_ID | ❌ | App id used when a tool call omits app_id. iOS: id123456789, Android: com.package.name |
App ID format
- iOS:
id+ numeric App Store id, e.g.id123456789 - Android: the package name, e.g.
com.mycompany.myapp
Development
npm run dev # run from TypeScript source (tsx)
npm run build # compile to dist/
npm test # run the vitest suiteNotes & limitations
- Raw-data and fraud reports return CSV; aggregate/cohort/SKAN/master return JSON. Output is passed through to the client as-is.
- Large raw-data pulls (up to 1M rows) are returned untruncated — mind your client's context limits; narrow the date range or add filters.
- Rate limits vary by endpoint family; AppsFlyer 429 responses are surfaced as tool errors (no client-side retry in this version).
get_master_reportreturns a not-found error on accounts without the Master API subscription — expected, not a bug.
See docs/ for the full PRD, technical design, and implementation checklist.
