Model Context Protocol (MCP) plugin for AppsFlyer API integration
AppsFlyer MCP has a basic structure with 2 tools, both with clear naming and documented schemas. However, there are critical gaps in error handling, output schema documentation, and parameter descriptions that prevent this from reaching a higher tier. Tool names follow verb_noun convention (get_aggregate_data, test_appsflyer_connection), which is good. Schemas are present and properly typed using Pydantic. However, descriptions are generic, output schemas are not documented, and error handling lacks recovery guidance. The server implements neither tool annotations nor advanced features. For a domain-specific API wrapper, this represents typical but mediocre quality.
Fetches aggregate data reports from the AppsFlyer Pull API.
Test the connection to AppsFlyer API and return server status.
Output schema not documented. get_aggregate_data returns raw CSV text; test_appsflyer_connection returns a formatted string. LLMs cannot plan downstream operations or parse results without knowing the structure.
Error handling lacks recovery guidance. Exceptions return bare error messages (e.g., 'HTTP error occurred: {e.response.text}') without telling the LLM what to do next. Should classify errors as retryable/user-fixable/fatal and suggest corrective actions.
Parameter descriptions are sparse. 'report_type' enum has 5 values but no guidance on which to use when or what each returns. 'from_date' and 'to_date' lack range constraints or guidance on max span.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Tool descriptions are generic. 'Fetches aggregate data reports from the AppsFlyer Pull API' does not explain when to use this tool vs. test_appsflyer_connection, what data formats are returned (CSV?), or what happens if credentials are missing.
No pagination support. If AppsFlyer returns large datasets, the tool provides no limit/offset parameters. The description should state max result size or recommend calling in smaller date ranges.
No tool annotations (destructiveHint, readOnlyHint, idempotentHint). Both tools are read-only and safe to retry, but this is not declared in metadata. Annotations help LLMs reason about safety and retry strategies.