{"id":516117,"recorded_at":"2026-10-27T17:00:39.271897Z","observed_at":"2026-10-27T17:00:39.271755Z","subject_kind":"endpoint","subject":"e25e2048-fc80-4aef-b32a-d76c8e3aeffc","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":15,"tools":[{"description":"Add an app to your watchlist, and with a keyword_id also track that keyword for the app. A keyword is tracked only for an app on your watchlist. Needs an API key bound to an account.","inputSchema":{"properties":{"app_id":{"description":"App Store ID of the app to watch","type":"integer"},"country_code":{"default":"us","description":"Two-letter storefront code (default: \"us\"); with keyword_id it must match the keyword's storefront","type":"string"},"keyword_id":{"description":"Keyword uuid to track for the app (optional; from the keyword tools)","type":"string"}},"required":["app_id"],"type":"object"},"name":"add_to_watchlist"},{"description":"Get the ad creatives one iOS app is running, with the ad library each came from and how many that library holds for the app.","inputSchema":{"properties":{"app_id":{"description":"App Store ID (numeric ID from the app URL)","type":"integer"},"limit":{"default":30,"description":"Ads per page (1-100, default: 30)","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Ads to skip (default: 0)","minimum":0,"type":"integer"},"platform":{"description":"Narrow to one ad library","enum":["meta","google","apple"],"type":"string"}},"required":["app_id"],"type":"object"},"name":"get_ads"},{"description":"Get the listing for one iOS app by app_id: name, developer, subtitle, description, version, price, languages, content rating, screenshot URLs, an AI-written short summary, plus the storefront's rating and rating count, its latest recorded chart position (and the one before it), and the latest revenue and downloads estimate. Use this for a single app's current snapshot; use get_ranking_history for positions over time, get_revenue_history for estimates over time and get_timeline for listing changes. Errors with 'App not found' when the id is not in our data. Get the id from search_apps.","inputSchema":{"properties":{"app_id":{"description":"App Store ID (numeric ID from the app URL)","type":"integer"},"country":{"default":"us","description":"Two-letter country code (default: \"us\")","type":"string"}},"required":["app_id"],"type":"object"},"name":"get_app_details"},{"description":"List every App Store category as a category_id and category_name pair (a fixed list, no arguments, no network call). Use it to find the category_id to pass to get_rankings; the overall chart is category_id 36.","inputSchema":{"properties":{},"type":"object"},"name":"get_categories"},{"description":"Get the keywords this API key's own account has asked us to track, with each keyword's next scheduled SERP sweep. Scoped to the caller, same as get_tracked_apps.","inputSchema":{"properties":{"app_id":{"description":"Only return keywords watched for this App Store ID (default: every app the account watches)","type":"integer"},"limit":{"default":100,"description":"Maximum number of keywords (1-200, default: 100)","maximum":200,"minimum":1,"type":"integer"}},"type":"object"},"name":"get_keyword_watchlist"},{"description":"Get the App Store search terms one iOS app is collected as ranking for, with its position and the day that position was observed.","inputSchema":{"properties":{"app_id":{"description":"App Store ID (numeric ID from the app URL)","type":"integer"},"limit":{"default":50,"description":"Maximum keywords (1-200, default: 50)","maximum":200,"minimum":1,"type":"integer"}},"required":["app_id"],"type":"object"},"name":"get_keywords"},{"description":"Get one app's top-free chart position per day in one storefront, as ranking_position and created_at points. The chart is the overall chart when the app has ever ranked there, otherwise the app's own category chart. Look back 1 to 3650 days (default 30). Use it for trends and for explaining a move; use get_rankings for a whole chart on one day. Top paid and top grossing history is not collected.","inputSchema":{"properties":{"app_id":{"description":"App Store ID of the app","type":"integer"},"country":{"default":"us","description":"Two-letter country code (default: \"us\")","type":"string"},"days":{"default":30,"description":"Number of days of history (1-3650, default: 30)","maximum":3650,"minimum":1,"type":"integer"}},"required":["app_id"],"type":"object"},"name":"get_ranking_history"},{"description":"Get the App Store top free chart for a country, in chart order with #1 first: the overall chart by default, or one category via category_id (see get_categories). Each app comes with its position, previous position, name, developer, rating and revenue and download estimates, and the response gives the chart day it describes. Only top free is collected; top paid and top grossing are not. Use get_ranking_history for how one app's position moved over time.","inputSchema":{"properties":{"category_id":{"description":"App Store category ID (default: \"36\", the overall chart; e.g. \"6015\" for Finance, \"6014\" for Games). get_categories lists them.","type":"string"},"chart":{"default":"top_free","description":"Which chart. Only top_free is collected (top paid and top grossing are not, and return no items), so this is the default and the only option.","enum":["top_free"],"type":"string"},"country":{"default":"us","description":"Two-letter country code (default: \"us\")","type":"string"},"limit":{"default":100,"description":"Maximum number of results (1-200, default: 100)","maximum":200,"minimum":1,"type":"integer"}},"type":"object"},"name":"get_rankings"},{"description":"Get the worldwide monthly downloads and revenue estimates for one iOS app, one point per data month (dated its first day). Values are Sensor Tower buckets; downloadsFloor/revenueFloor mark the stored 1,000, which means \"< 5K\", not an exact figure.","inputSchema":{"properties":{"app_id":{"description":"App Store ID (numeric ID from the app URL)","type":"integer"},"range":{"default":"all","description":"How far back to read","enum":["30d","90d","1y","all"],"type":"string"}},"required":["app_id"],"type":"object"},"name":"get_revenue_history"},{"description":"Get the most recent user reviews we have stored for one iOS app, newest first: title, text, star rating (rating), author, app version reviewed and date. Takes no country argument. Use it to read what users say; use get_app_details for the overall rating and rating count. Returns an empty list when we hold no reviews for the app.","inputSchema":{"properties":{"app_id":{"description":"App Store ID of the app","type":"integer"},"limit":{"default":10,"description":"Maximum number of reviews (1-50, default: 10)","maximum":50,"minimum":1,"type":"integer"}},"required":["app_id"],"type":"object"},"name":"get_reviews"},{"description":"Find apps similar in meaning to one app, using embedding similarity over their listings (limited to the given storefront). Each result has rating, rating count, revenue and downloads estimates and a distance (lower means closer). Results are sorted by downloads estimate, biggest first, not by distance. Use it to build a competitor list; use search_apps to look up an app by name instead.","inputSchema":{"properties":{"app_id":{"description":"App Store ID of the reference app","type":"integer"},"country":{"default":"us","description":"Two-letter country code (default: \"us\")","type":"string"},"limit":{"default":12,"description":"Maximum number of similar apps (1-50, default: 12)","maximum":50,"minimum":1,"type":"integer"}},"required":["app_id"],"type":"object"},"name":"get_similar_apps"},{"description":"Get every recorded change to one iOS app listing: version, name, subtitle, price, screenshots and description, newest first, with the day each change was first seen.","inputSchema":{"properties":{"app_id":{"description":"App Store ID (numeric ID from the app URL)","type":"integer"},"country":{"default":"us","description":"Two-letter country code (default: \"us\")","type":"string"}},"required":["app_id"],"type":"object"},"name":"get_timeline"},{"description":"Get the apps this API key's own account is monitoring, newest first. Scoped to the caller: a key bound to another account sees a different set, and a key bound to no account is refused.","inputSchema":{"properties":{"limit":{"default":200,"description":"Maximum number of tracked apps (1-1000, default: 200)","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"name":"get_tracked_apps"},{"description":"Find iOS apps by name or keyword, using Apple's iTunes Search API at call time (a text search over Apple's catalogue, not our own data). Returns app_store_id, name, developer, category id, rating, rating count and price for each match. Call this first to turn an app name into the app_store_id (the 'app_id' argument) that every per-app tool needs.","inputSchema":{"properties":{"country":{"default":"us","description":"Two-letter country code (default: \"us\")","type":"string"},"limit":{"default":25,"description":"Maximum number of results (1-50, default: 25)","maximum":50,"minimum":1,"type":"integer"},"query":{"description":"Search query (e.g., \"fitness tracker\", \"photo editor\")","type":"string"}},"required":["query"],"type":"object"},"name":"search_apps"},{"description":"Search real iPhone app screens that App Store Tracker captured itself (the library at /designs) by describing what you want to see, e.g. \"paywall with a free trial toggle and the yearly plan preselected\", \"onboarding that asks for the user's goals\", \"notification permission pre-prompt\". Describe one screen in plain words; narrow with pattern or app_id rather than with negations or keyword lists. Ranked by meaning, with exact on-screen words counting extra, and at most per_app screens per app. Each item gives the app_id for every per-app tool, the flow and screen it belongs to, a short summary, the image URL and the App Store Tracker page to cite. Covers only the apps we captured, not the whole App Store; an empty list means none of those matched.","inputSchema":{"properties":{"app_id":{"description":"Only this app's screens (App Store ID, from search_apps)","type":"integer"},"limit":{"default":8,"description":"Screens per page (1-20, default: 8)","maximum":20,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Screens to skip, for the next page (use next_offset; at most 100)","maximum":100,"minimum":0,"type":"integer"},"pattern":{"description":"Only screens of this kind (default: any)","enum":["onboarding","paywall","sign_up","login","permission_dialog","home_feed","discover","search","content_list","content_detail","media_player","profile","settings","modal_sheet","empty_state","mood_checkin","other"],"type":"string"},"per_app":{"default":2,"description":"Most screens from one app (1-5, default: 2; ignored with app_id)","maximum":5,"minimum":1,"type":"integer"},"query":{"description":"What the screen shows, in plain language (at most 300 characters)","type":"string"}},"required":["query"],"type":"object"},"name":"search_designs"}]},"body_sha256":"12d69c59dc11b90139dc405f4184b45b4aa2aac0283c150ae72d4d8d730d6647","prev_id":null,"leaf":"0x4ee6d32ba3155204ed4c4af2fea67760558aa58378f04229d39b0bccbf503de0","leaf_text":"{\"body\":\"12d69c59dc11b90139dc405f4184b45b4aa2aac0283c150ae72d4d8d730d6647\",\"id\":516117,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793120439271755,\"prev\":null,\"subject\":\"e25e2048-fc80-4aef-b32a-d76c8e3aeffc\",\"subject_kind\":\"endpoint\"}","day":null,"proof":[]}