Mogut — App Store Growth MCP
Provides read-only App Store growth and ASO analytics for the Apple ecosystem, including App Store Connect sales, reviews, metadata, Apple Ads search-term reporting, and keyword popularity signals.
Provides App Store optimization and growth analysis through public market data, competitor comparisons, review and ranking intelligence, and full/periodic report generation for iOS and Mac App Store apps.
Connects PostHog as a revenue data source to enable revenue-per-keyword analysis in App Store growth reports.
Mogut
Read-only App Store growth analysis (ASO) MCP server for the Apple ecosystem (iOS + Mac App Store).
Mogut never writes to the App Store. Write actions are handed off as ready-to-run Heimdall tool calls that the user approves.
1.0: 47 tools over 13 live data sources, ending in the report orchestrators.
report_appproduces the full App Report in one call; the periodic tiers (daily/weekly/monthly) report deltas from local history. See CHANGELOG.md.
Install
npm install -g mogut
mogut setupThe wizard registers Mogut with the MCP clients it finds (Claude Code & Desktop, Codex, Cursor, VS Code, Windsurf, Antigravity) — restart the client once afterwards.
The wizard stores credentials in the macOS Keychain (com.milowda.credentials) with a .env
fallback. Secrets are entered in the terminal only — never in chat, never logged, never
displayed. See SECURITY.md.
Related MCP server: ASO Score MCP
MCP config
{
"mcpServers": {
"mogut": { "command": "mogut", "args": [] }
}
}Nine tools are exposed by default: six mogut_* meta tools plus the three report
orchestrators (report_app, report_competitor_deep, report_comparison — the fourth,
report_actions, lands in v1.1). Everything else is opt-in per profile: set
MOGUT_PROFILES="keyword,competitor" (or "all"). mogut_search_tools finds a tool and
tells you which profile enables it. The flows are described in GUIDE.md.
What a result looks like
Every tool returns data (structuredContent) plus a writing instruction for the host model —
statistics are computed in code, never delegated to the model. Every result carries
source, confidence and lastCheckedAt; truncation is visible (fetched/analyzed counts);
review and competitor text is marked untrusted data. A broken source becomes a visibly
skipped section, never an invented number.
Tiers
Tier | Needs | Unlocks |
0 | nothing | all public sources — a full report is produced, marked low confidence |
1 | App Store Connect key | your own analytics, sales, reviews, metadata |
2 | + Apple Ads OAuth | real search term reports and measured demand |
3 | + a connector (RevenueCat/PostHog) | revenue-per-keyword analysis |
mogut_status shows the current tier, verifies credentials live (verify: true) and counts
down the 180-day Apple Ads key rotation.
Which App Store Connect role unlocks what
ASC role on the key | What works |
Sales (Access to Reports) or Finance | sales reports, analytics report download, reviews, metadata import |
Admin | additionally: the one-off |
The feed only produces data after that one POST. Mogut never sends it from the MCP surface:
run npx mogut analytics enable --app <id> in the terminal (asks for the path to an Admin
.p8, uses it in memory, stores nothing), or --print-only to print the request for whoever
holds Admin. disable undoes it.
Advanced: Apple Ads popularity index
The official Apple Ads API has no popularity index (verified live: POST /api/v5/keywords/popularities → 404). The number the Ads UI shows comes from an
undocumented endpoint that authenticates with a web session, not OAuth. Mogut can read it,
but the wizard does not ask for it: it is a pasted browser cookie, it expires, and using it
is a grey area against the Apple Ads terms. Without it, keyword_popularity_fetch falls
back to a proxy score marked low confidence.
If you want it anyway:
Log in at https://app-ads.apple.com and open any campaign screen.
Open devtools → Network, filter on
/cm/api, click one request.Copy that request's
Cookierequest header, whole.export MOGUT_APPLE_ADS_SESSION='<the cookie header>'in the environment your MCP client launches Mogut from — or store it under theapple-ads-sessionaccount of thecom.milowda.credentialsKeychain service.
Re-do it when the session expires. mogut_discover_sources shows the source as down once
the endpoint starts refusing.
What a report looks like
report_app produces the on-demand full report; daily_digest, weekly_change_report and
monthly_status_report produce the periodic tiers, reading deltas from the same local
history. Anonymized golden examples of both:
EXAMPLE_REPORT_FULL.md ·
EXAMPLE_REPORT_PERIODIC.md.
Development
npm install && npm run build && npm testAdding a data source? Read CONTRIBUTING.md — the adapter contract and the fixture requirement are enforced by tests.
src/core/catalog.ts is generated from docs/TOOL_CATALOG.md — regenerate with
node scripts/gen-catalog.mjs.
MIT.
Available Tools
9 toolsmogut_discover_profilesA
Lists every profile, whether it is loaded, and the tools it contains.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. 'Lists' signals a read-only action and the sentence specifies returned content, but it does not disclose possible limitations, failure modes, how 'loaded' is represented, or whether any state changes happen. This is adequate, not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler. It leads with the action and immediately describes the meaningful parts of the result. Every part of the description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, this description gives enough orientation: it says what the operation produces and at what scope. It could add detail like the exact return format, but nothing critical is missing for an agent deciding whether to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so there is little parameter-level semantics to add. The description appropriately focuses outward on what is returned rather than on inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Lists') and resource ('every profile'), and describes exactly what the output contains: load status and tools. This cleanly separates it from sibling tools like mogut_discover_sources and mogut_search_tools, which focus on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when the agent needs a full inventory of profiles and their loaded-state/tools. However, it never explicitly names an alternative or explains when not to use it, leaving the routing decision to inference based on sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mogut_discover_sourcesA
Lists the data sources with their tier, required credentials, health status and confidence level. With probe=true it makes one live request per source instead of reporting what past calls recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| probe | No | run one live health request per configured source (slower, but current) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral transparency burden, and it is largely successful: it discloses the cached/past-call default vs. the live probe mode. A minor gap is that it never explicitly states that listing sources is a non-mutating read operation or how a failed live request is reported, but the central behavioral difference is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both essential. The first fronts the exact purpose and output fields; the second efficiently covers the parameter's behavior. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single optional parameter and no output schema, this description is complete: it enumerates the returned fields, explains the default vs live modes, and covers the probe behavior. There is no meaningful missing context an agent would need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the probe parameter already documented, so the baseline is 3. The description exceeds that by contrasting probe=true with the default behavior (reporting what past calls recorded), which adds meaning beyond the schema's description of 'one live health request per configured source.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists) with a concrete resource (data sources) and the exact attributes returned: tier, required credentials, health status, and confidence level. It is distinguishable from sibling tools like mogut_discover_profiles by resource type, though it does not explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear mode-level guidance comparing probe=true (live one-request-per-source) to the default cached behavior, which helps an agent decide on the parameter value. However, it provides no explicit guidance on when to choose this tool over siblings such as mogut_status, mogut_setup_check, or mogut_discover_profiles.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mogut_explain_metricA
Explains how a score is computed: formula, inputs and caveats.
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | metric name, one of: keyword_opportunity, keyword_difficulty, brand_dominance, keyword_popularity, market_difficulty, metadata_score, ppp_price, review_health |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries most of the behavioral disclosure burden. It clearly indicates the tool produces an explanation containing formula, inputs, and caveats, and the wording implies a read-only informational operation. It does not mention output format or whether the explanation is textual, but the behavior is not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler. It front-loads the action and then gives the three elements the explanation will contain. Everything in the description is relevant and none of the schema information is repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one fully documented parameter and no nested objects, the description is mostly complete: it states what the tool produces and where caveats will be addressed. The main missing pieces are example output, return format, and a more explicit statement about the expected frontier target.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds minimal value here. It references 'inputs' as part of the explanation, but does not enumerate the parameter; the schema already does that with a clear list of valid metric names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Explains') and a concrete resource: how a score is computed. It then states the exact content covered ('formula, inputs and caveats'), which separates it from sibling report, status, and discovery tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use context is implied rather than explicit: an agent would call this tool when it needs to understand how a metric was calculated. The description gives no explicit when-to-use or when-not-to-use guidance, though no sibling tool appears to overlap with this explanation function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mogut_search_toolsA
Searches the whole tool catalog (including tools that are not loaded or not implemented yet) by name, description or profile.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | search term, e.g. "keyword" or "review" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal a non-obvious trait: the search covers tools that are not loaded or not implemented yet, which informs the agent about scope beyond the visible tool list. However, it says nothing about the return format, whether the search is case-sensitive, or any ordering or filtering behavior. Minimal behavioral context is provided, though enough to understand the main capability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One clean, front-loaded sentence that states the action, the scope, and the search criteria. Every clause adds value and there is no padding or redundancy. Efficiently sized for an API description of a straightforward search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple—one query parameter, no nested objects, and no output schema. The description fully covers the tool's purpose, scope ('whole catalog'), and search dimensions, which is sufficient for an agent to decide when to call it and what to pass. The lack of an explicit statement about the returned format is a minor gap but does not block correct invocation given the tool's obvious search-and-return role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of parameters with a clear description for 'query' ('search term', with examples). The tool description goes beyond the schema by stating which attributes of tools are searched (name, description, profile), giving the agent a fuller understanding of what the query can match. This adds meaningful context beyond the schema's simple 'search term' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Searches'), a clear resource ('the whole tool catalog'), and an explicit attribute ('including tools that are not loaded or not implemented yet'). It also specifies the searchable fields (name, description, profile), which distinguishes it from sibling tools that handle status, setup, discovery of profiles/sources, or metric explanation. An agent can understand the tool's function without any ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys strong context for when to use the tool: whenever an agent needs to locate a tool within the catalog, including unloaded or unimplemented ones. It doesn't explicitly name exclusions or alternatives among the sibling tools, but the contrast is implicit since siblings target specific operations rather than a catalog-wide search. This is clear enough for typical selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mogut_setup_checkA
Checks Keychain access, the SQLite database and any credentials an existing Heimdall install may already hold (never used without approval). Lists the manual setup links.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explains what the tool examines, flags the approval prerequisite, and mentions its output. It does not explicitly state the tool is read-only, but 'Checks' plus the caution about approval gives the agent a clear safety picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the main action, and every sentence adds useful information: what is checked, the approval caveat, and the listed output. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument tool with no output schema, the description supplies the key context: why to call it, what it touches, the approval constraint, and what it returns. It does not include deeper troubleshooting or interaction details, but those are not essential for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage, so there is no hidden parameter burden for the description to explain. The 0-parameter baseline applies; no parameter guidance is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the verb and resources: 'Checks Keychain access, the SQLite database and any credentials' and 'Lists the manual setup links.' It does not explicitly compare itself to sibling tools like mogut_status or mogut_discover_profiles, but its setup-diagnostic purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit operational condition: 'never used without approval,' which is a useful guardrail for agents. The use case is implied by the tool name and by mentioning manual setup links, though it does not explicitly name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mogut_statusA
Current tier, loaded profiles, credential and optional-key state, source health, database info, and what the next tier would add. With verify=true each stored credential is tested against its live API.
| Name | Required | Description | Default |
|---|---|---|---|
| verify | No | test every stored credential against its API (one live call per source) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full behavioral burden. It meaningfully discloses that verify=true triggers a live API test of each stored credential, which is the key side-effect an agent needs to anticipate. It doesn't note potential slowness or failure modes, but it is still notably transparent for a status tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, and both are informative. The first fronts the categories that compose the status report; the second explains the optional verify behavior. No excess text or repetition is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional boolean parameter and no output schema, the description gives enough of what it returns to call the tool correctly. It could be more explicit about how credentials are represented when verification fails or what exactly 'next tier would add' looks like, but the current text provides a suitable functional map.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already contains the parameter definition, including the behavior, with 100% coverage. The description largely restates this: 'each stored credential is tested against its API' mirrors the schema. It adds no additional semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates specific status categories — current tier, loaded profiles, credential/optional-key state, source health, database info, and next-tier additions — so the tool's purpose is clear despite the absence of an explicit verb. It also broadly differentiates itself from sibling tools that perform setup checks or discovery, since this is the only status-oriented one that returns this exact bundled snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The listed content implies this is the tool to inspect overall system state, but no explicit when-to-use guidance is given. There is no mention of when an agent should prefer mogut_setup_check or mogut_discover_profiles instead, so usage has to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_appA
The full App Report in one call: listing + metadata audit, review mining, keyword opportunity (when terms are given), market difficulty, ASC performance (from previously imported data), rank history, seasonal calendar and culture notes. Sections degrade independently — a broken source is reported as skipped, never invented.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | at least one of appId, bundleId or an apps.apple.com URL | |
| audience | No | ||
| keywords | No | target terms with your 0-1 semantic fit judgement; omit to skip the ASO section | |
| storefront | Yes | ISO 3166-1 alpha-2 storefront code, e.g. 'US' | |
| maxReviewPages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does a strong job: it reveals that ASC performance depends on previously imported data, that sections fail independently, and that broken sources are reported as skipped rather than fabricated. This is valuable failure-mode context beyond what the schema could convey. It stops short of covering auth, rate limits, or output shape, but the degradation disclosure is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, uses a single evocative phrase front-loaded with the core purpose, and avoids repeating schema content. Every clause earns its place: the section list gives a complete sense of scope, and the graceful-degradation sentence provides critical behavioral context without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with five parameters, a nested app object, one enum, and no output schema, the description does enough to convey main intent and failure behavior, but not the full picture. It omits return format details, expects the agent to guess how audience relates to 'culture notes', and does not explain maxReviewPages. The notable degradation guarantee partially compensates for missing structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, with app, storefront, and keywords already explained in the schema. The description adds useful meaning for keywords by linking it to keyword opportunity and ASO section behavior. However, audience and maxReviewPages lack meaningful descriptions in both the schema and the tool description, so the overall parameter comprehension is just adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as producing 'The full App Report in one call' for a single app, enumerating specific report sections. The scope is distinct from the sibling competitor and comparison report tools, and even within the listed sections an agent can infer the report covers. No ambiguity remains about the primary resource and action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this for a full single-app report and include keywords to activate that section. However, it never explicitly contrasts with sibling tools such as report_competitor_deep or report_comparison, nor states when to prefer them. It gives two conditions implicitly (one call, full multi-section report) but leaves alternative routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_comparisonA
Side-by-side comparison of your app against the SELECTED competitors on the shortlist, across metadata, product page, monetization and keyword ranks. The feature axis is semantic and is derived by you from the descriptions — the data carries the raw text.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | No | keywords for the marketing axis; omit to skip it | |
| ownAppId | Yes | ||
| storefront | Yes | ISO 3166-1 alpha-2 storefront code, e.g. 'US' | |
| competitorAppIds | No | explicit competitor set; omit to use the shortlist entries with status selected |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It conveys that the output is a side-by-side comparison and adds a somewhat cryptic note that the feature axis is 'semantic' and 'derived by you from the descriptions,' indicating the raw text is relevant. However, it leaves the mechanics of the comparison, any requirements for the shortlist, and possible limitations unexplored.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and gets the main idea across in the first sentence, but the second sentence, 'The feature axis is semantic and is derived by you from the descriptions — the data carries the raw text,' is vague and confusing. It does not clearly earn its place in the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a report tool with no output schema and no annotations, the definition gives enough to understand that a side-by-side comparison is returned across several dimensions. It still leaves notable gaps: no concrete guidance on when to prefer this over report_app or report_competitor_deep, no explanation of what 'the feature axis is semantic' means for the agent, and no mention of output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and most parameter meaning is already captured: storefront, terms, and competitorAppIds each have descriptions in the schema. The tool description adds high-level comparison axes but does not meaningfully explain ownAppId or refine parameter semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific task: a 'side-by-side comparison of your app against the SELECTED competitors on the shortlist.' The scope and covered dimensions (metadata, product page, monetization, keyword ranks) make the tool's function immediately obvious and distinguish it from sibling tools like report_app or report_competitor_deep.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly scopes the tool to the selected competitors on the shortlist, which gives an agent clear context for when this comparison tool is appropriate. It does not explicitly state when not to use it or mention sibling alternatives, but the shortlist-scoped framing is a useful selection signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_competitor_deepA
Deep-dive on ONE competitor: public listing profile, changes observed between captures (inferred, low confidence), monetization signals (price + SensorTower estimates), keyword portfolio against your own ranks, and complaint mining with verbatim quotes. Everything is public data — what cannot be observed is skipped, not guessed.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | No | keyword portfolio to check; omit to skip that section | |
| ownAppId | No | include to compare ranks side by side | |
| storefront | Yes | ISO 3166-1 alpha-2 storefront code, e.g. 'US' | |
| maxReviewPages | No | ||
| competitorAppId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It explicitly discloses that captured changes are inferred with low confidence, SensorTower data are estimates, and unobservable data is skipped rather than guessed. These are important trust hypotheses for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense sentence that is front-loaded with the core differentiator ('ONE competitor'), lists output section markers, and ends in a concise policy about data limitations. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema or annotations, the description still names all major report sections and explains the tool's limits. It does not describe the output dossier's structure, but the provided parameter schema and section enumeration are enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 60% schema description coverage, the description adds meaningful context by linking the conceptual workflow to the parameters: competitor to competitorAppId, keyword portfolio to terms, and to ownAppId. It does not specifically explain maxReviewPages or storefront, but those are more self-explanatory and partially covered by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with 'Deep-dive on ONE competitor' and precisely enumerates what the tool produces: listing profile, inferred changes, monetization signals, keyword portfolio against own ranks, and complaint mining. This clearly distinguishes it from report_app and report_comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'ONE competitor' language gives clear context and the sibling-tool naming for report_comparison implies the multi-competitor alternative. The 'everything is public data' caveat and 'skipped, not guessed' note also set agent expectations. It does not explicitly name an alternative or state a hard exclusion, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v1.0.0- First observed
mogut_discover_profiles - First observed
mogut_discover_sources - First observed
mogut_explain_metric - First observed
mogut_search_tools - First observed
mogut_setup_check - First observed
mogut_status - First observed
report_app - First observed
report_comparison - First observed
report_competitor_deep
TDQS
The tool set is largely distinct, especially the three report tools. Some overlap exists between mogut_status, mogut_setup_check, and mogut_discover_sources around credentials and source health, but their overall purpose is clear enough to avoid major misselection.
The naming pattern is mixed: some tools use the consistent mogut_ prefix with verb-noun forms, but others are noun phrases such as mogut_status and mogut_setup_check, and the report_ group follows a separate convention with report_competitor_deep being especially awkward. The naming is readable but not uniform.
Nine tools is a well-scoped size for this server. The collection covers setup, health, orientation/exploration, metric understanding, and three distinct report types without unnecessary bloat.
The server covers its apparent read-only reporting and discovery mission well, including setup checks, source health, profile/tool discovery, metric explanation, and core report outputs. Obvious gaps are not severe: importing data or managing the competitor shortlist appears to be handled outside the MCP, but it is still an implicit dependency.
Maintenance
Related MCP Connectors
App Store keyword research, rank tracking and App Store Connect performance for your iOS apps.
ASO analytics and App Store optimization tools for indie iOS developers and AI agents.
ASO tools for AI agents: keyword research, rank tracking, competitor analysis (iOS & Android).
Live App Store & Google Play data for AI agents: app discovery, ASO keywords, reviews.
Related MCP Servers
- AlicenseAqualityAmaintenanceScans any website and produces an Agent Readiness Report scored on the open ASO framework.53592MIT

ASO Score MCPofficial
AlicenseAqualityAmaintenanceScans websites to evaluate agent-readiness and produce an ASO Score Report across 34 signals, helping improve discoverability, trust, and interoperability for AI agents.253661MIT- AlicenseNot gradedqualityDmaintenanceAn MCP server for App Store Optimization that provides keyword research, competitor analysis, review sentiment, and metadata optimization using real App Store data without requiring an API key.344MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for mobile growth & user acquisition, connecting LLMs to a curated knowledge base of ad optimization insights and analytical skills for subscription apps.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/erayendes/app-store-growth-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server