Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ASO_DEBUG_RATINGSNoSet to 1 to dump the SensorTower Ratings and Reviews panel text to stderr when rating score or count come back N/A. Leave unset to disable.
ASO_CACHE_TTL_HOURSNoHow long research_rivals results stay cached before re-scraping. Defaults to 24 when unset.24

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}
prompts
{}
resources
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
research_rivalsA

Search the App Store for a keyword and fetch SensorTower analytics for the top results — all in one call. Results are cached for 24 hours so repeat queries are instant.

Use this for a quick competitive overview when you want everything in one step. Use search_app_store + get_app_details separately when you need more than 3 results, a custom limit, or selective fetching of specific apps. Do not use this for Google Play or Android apps — it covers the iOS App Store only.

Requires a SensorTower account. On a cache miss the server opens a real Chromium window on the user's machine; the first run needs the user to log in there, and the session is reused from then on. If there is no session the call returns an error result carrying {"error": "not_logged_in"} and leaves the window open — tell the user to log in, then call again. A cache miss scrapes three apps and typically takes 30–60 seconds; a cache hit returns immediately and opens no browser.

Trigger phrases: "rival research", "research rivals", "competitor analysis", "find competing apps", "check competitors", "what apps compete with", "App Store competitors", "rivals for keyword".

Returns JSON:

{
  "keyword": "meditation",
  "country": "us",
  "fetchedAt": "2026-04-21T10:00:00.000Z",
  "cached": false,
  "apps": [
    {
      "rank": 1,
      "name": "App Name",
      "appStoreUrl": "https://apps.apple.com/us/app/id123456",
      "sensorTowerUrl": "https://app.sensortower.com/overview/123456",
      "downloads": "<5K",
      "revenue": "<$5K",
      "rating": { "score": "4.7", "count": "1,234" },
      "publisher": "Publisher Name",
      "categories": "Health & Fitness",
      "topMarkets": "United States, United Kingdom",
      "releaseDate": "Jan 1, 2020",
      "lastUpdated": "Mar 15, 2026",
      "languages": "English, Spanish",
      "inAppPurchases": "Monthly · $9.99",
      "publisherCountry": "United States",
      "advertisingNetworks": "N/A"
    }
  ]
}

Fields missing or gated behind a paywall will be "N/A". A single app failing to scrape is not fatal — that app comes back with "N/A" fields rather than failing the whole call. When cached is true, the data was served from the local cache and no scraping occurred.

Present results as a clean report for each app:


#1 — {name}

  • App Store: {appStoreUrl}

  • SensorTower: {sensorTowerUrl}

  • Downloads: {downloads}

  • Revenue: {revenue}

  • Rating: {rating.score} ({rating.count} ratings)

  • Publisher: {publisher}

  • Categories: {categories}

  • Top Markets: {topMarkets}

  • Worldwide Release Date: {releaseDate}

  • Last Updated: {lastUpdated}

  • Languages: {languages}

  • In-App Purchases: {inAppPurchases}

  • Publisher Country: {publisherCountry}

  • Advertised on Any Network: {advertisingNetworks}

search_app_storeA

Search the App Store for a keyword and return ranked results as a detailed table — instantly, no browser required.

Use this when you want to discover which apps rank for a keyword before deciding which ones to analyse in depth.

  • Follow up with get_app_details to fetch SensorTower analytics for specific app IDs.

  • Use research_rivals instead for a single convenience call that searches and fetches analytics together.

  • Do not use this for Google Play or Android apps — it covers the iOS App Store only.

Unlike research_rivals and get_app_details, this needs no SensorTower account, opens no browser window, and returns in about a second. It also carries no downloads or revenue figures — those only come from the SensorTower tools.

Returns markdown (not JSON): one table per result, ranked, with every App Store field available including the numeric app ID that get_app_details takes. Unavailable fields read "N/A". A keyword with no matches returns just the header line and no tables.

get_app_detailsA

Fetch SensorTower analytics for one or more App Store app IDs. Returns downloads, revenue, ratings, publisher info, markets, and more for each app.

Use this when you already have app IDs (e.g. from search_app_store) and want detailed analytics for only a subset of them — avoiding unnecessary scrapes for apps you don't need. Use research_rivals instead for a single convenience call that searches and fetches analytics together. Do not use this for Google Play or Android apps — it takes numeric iOS App Store IDs only.

Requires a SensorTower account. The server opens a real Chromium window on the user's machine; the first run needs the user to log in there, and the session is reused from then on. If there is no session the call returns an error result carrying {"error": "not_logged_in"} and leaves the window open — tell the user to log in, then call again. Results are never cached, so every call scrapes fresh and costs roughly 10–20 seconds per app ID.

Returns JSON:

{
  "country": "us",
  "fetchedAt": "2026-04-21T10:00:00.000Z",
  "apps": [
    {
      "rank": 1,
      "name": "App Name",
      "appStoreUrl": "...",
      "sensorTowerUrl": "...",
      "downloads": "<5K",
      "revenue": "<$5K",
      "rating": { "score": "4.7", "count": "1,234" },
      "publisher": "Publisher Name",
      "categories": "Health & Fitness",
      "topMarkets": "United States, United Kingdom",
      "releaseDate": "Jan 1, 2020",
      "lastUpdated": "Mar 15, 2026",
      "languages": "English, Spanish",
      "inAppPurchases": "Monthly · $9.99",
      "publisherCountry": "United States",
      "advertisingNetworks": "N/A"
    }
  ]
}

Fields missing or gated behind a paywall will be "N/A". A single app failing to scrape is not fatal — that app comes back with "N/A" fields rather than failing the whole call.

prepare_iae

Prepare an iOS App Store In-App Event (IAE) — generate copy variations and a final report.

Use this when the user wants to create or draft an in-app event, prepare IAE metadata, or generate App Store event copy. Accepts user-supplied keywords and event parameters, then returns a structured brief. Do not use it for ordinary App Store listing metadata (title, subtitle, description) — it covers In-App Event fields only.

Runs entirely locally: no network calls, no App Store or SensorTower lookup, and no keyword research of its own — the caller supplies the keywords (reach for research_rivals or search_app_store first if you still need to find them). Returns immediately.

After receiving the tool output, you MUST:

  1. Generate 3 distinct copy variations in the target language (from locale.language), each differing meaningfully in angle, tone, or keyword emphasis. For each variation produce:

    • Event name (hard limit: 30 chars — count every character; trim at word boundary if over)

    • Short description (hard limit: 50 chars — same rules)

    • Long description (hard limit: 120 chars — same rules) Display every field with its exact character count and ✓ / ✗ indicator. Fix any ✗ before showing the user. Keyword placement: Tier 1 keywords must appear in short description and long description; embed in event name only if it fits naturally. Prioritize keywords toward the beginning of each field. Copy rules: active voice, present tense, no pricing claims or % discounts, no competitor names, all three fields independently meaningful. If locale is not en-US, add an English translation line under each localized field so the user can verify meaning.

  2. Ask the user to choose one variation.

  3. After the user picks a variation, print the output table and the final summary report using this exact format:

Output table:

CHOSEN VARIATION — <locale.appleCode>
─────────────────────────────────────
Event name        : <text> (<N>/30)
Short description : <text> (<N>/50)
Long description  : <text> (<N>/120)
─────────────────────────────────────
Next step: upload event artwork in App Store Connect
  • Event card image : 2160 × 1080 px
  • App icon overlay : 1024 × 1024 px

Final summary report:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IN-APP EVENT REPORT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IAE locale       : <locale.appleCode> (<locale.language> — <locale.country>)
Keyword store    : <locale.store> store
Target audience  : <audience>
Event context    : <event_context>
Goal             : <goal>
Tone             : <tone>
─────────────────────────────────────
Keywords used    : <Tier 1 placed> | <Tier 2 placed>
Event name       : <text> (<N>/30 chars)
Short description: <text> (<N>/50 chars)
Long description : <text> (<N>/120 chars)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CHECKLIST
[ ] IAE locale is <locale.appleCode>
[ ] Event name ≤ 30 chars
[ ] Short description ≤ 50 chars
[ ] Long description ≤ 120 chars
[ ] No pricing claims or % discounts
[ ] No competitor names
[ ] Event artwork assets prepared (1024×1024 + 2160×1080)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Flag any checklist item that is not yet satisfied.

Returns JSON with the structured brief for generating copy.

Prompts

Interactive templates invoked by user choice

NameDescription
competitor_snapshotFull competitive read on one App Store keyword: pulls rival downloads, revenue, and ratings, then summarises who owns the keyword and how contested it is.
keyword_shortlistExpands one seed keyword into a ranked shortlist of App Store search terms worth targeting, each checked against live search results.
app_teardownDeep teardown of one or more known App Store apps: analytics, monetisation, market spread, and what their numbers imply about strategy.
positioning_gapCompares your app against the rivals ranking for a keyword and identifies where you are behind, level, or able to attack.
metadata_rewriteRewrites App Store name, subtitle, and keyword field against live rival listings, with hard character counts on every field.
in_app_eventRuns the full In-App Event workflow: builds the brief, generates three copy variations inside Apple's character limits, and produces the final report.

Resources

Contextual data attached and managed by the client

NameDescription
tool_selection_guideWhich tool to reach for, what each one costs, how the SensorTower login works, and how to treat missing data.
country_codesTwo-letter storefront codes accepted by every tool's `country` argument, grouped by region.
aso_fieldsCharacter limits and indexing behaviour for app name, subtitle, keyword field, promotional text, and description.
iae_fieldsCharacter limits, artwork sizes, copy rules, and keyword tiers for iOS In-App Events.
iae_localesEvery locale `prepare_iae` accepts, with its Apple locale code, language, country, and keyword storefront.
research_cache_indexKeyword/country pairs already researched on this machine, with their age and whether they are still fresh.

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/meyusufdemirci/app-store-operator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server