AppSkyline App Rankings

Track your apps' keyword rankings, reviews and store listings on App Store, Google Play and more.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
91%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~8,587Tokens (tool definitions)
~5.5 KBTypical response size
Significant attention impact (6.71% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "appskyline": {
      "url": "https://mcp.appskyline.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.appskyline.com/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_apps

Use this when someone asks which apps they track in AppSkyline, or an app's id is needed. Returns each app's id, name, default locale and its App Store, Mac App Store, Google Play and Microsoft Store ids, up to 100 apps. Not for finding other apps in a store.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "apps": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "$ref": "#/properties/apps/items/properties/id"
          },
          "defaultLocale": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "iosAppStoreId": {
            "$ref": "#/properties/apps/items/properties/id"
          },
          "macosAppStoreId": {
            "$ref": "#/properties/apps/items/properties/id"
          },
          "googlePlayStorePackage": {
            "$ref": "#/properties/apps/items/properties/id"
          },
          "windowsStoreProductId": {
            "$ref": "#/properties/apps/items/properties/id"
          }
        },
        "required": [
          "id",
          "name",
          "defaultLocale",
          "iosAppStoreId",
          "macosAppStoreId",
          "googlePlayStorePackage",
          "windowsStoreProductId"
        ],
        "additionalProperties": false
      },
      "maxItems": 100,
      "description": "Apps the signed-in account can access, at most 100"
    },
    "truncated": {
      "type": "boolean",
      "description": "True when the account has more than 100 apps"
    }
  },
  "required": [
    "status",
    "apps",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_app(appId)

Use this when someone asks about one of their AppSkyline apps, such as which stores it is on or which languages it supports. Returns the app's name, default and supported locales, App Store, Mac App Store, Google Play and Microsoft Store ids, and creation and edit times. Not for the live public store page or ratings.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    }
  },
  "required": [
    "appId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "app": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultLocale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "locales": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32
              },
              "maxItems": 100
            },
            "iosAppStoreId": {
              "$ref": "#/properties/app/anyOf/0/properties/name"
            },
            "macosAppStoreId": {
              "$ref": "#/properties/app/anyOf/0/properties/name"
            },
            "googlePlayStorePackage": {
              "$ref": "#/properties/app/anyOf/0/properties/name"
            },
            "windowsStoreProductId": {
              "$ref": "#/properties/app/anyOf/0/properties/name"
            },
            "creationTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "defaultLocale",
            "locales",
            "iosAppStoreId",
            "macosAppStoreId",
            "googlePlayStorePackage",
            "windowsStoreProductId",
            "creationTime",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when the app is not in the signed-in account"
    }
  },
  "required": [
    "status",
    "app"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_keywords(appId, limit, skip)

Use this when someone asks which keywords they track for an app, or before adding or deleting one. Returns each tracked keyword's id, search term, language, country and bid, up to 500 per call. Not for current rankings or search volume.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500,
      "description": "Keywords to return, from 1 to 500; omit for all tracked keywords, capped at 500"
    },
    "skip": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Keywords to skip before the first one returned, for paging; defaults to 0"
    }
  },
  "required": [
    "appId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "term": {
            "$ref": "#/properties/keywords/items/properties/id"
          },
          "language": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10
              },
              {
                "type": "null"
              }
            ]
          },
          "bid": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000000
              },
              {
                "type": "null"
              }
            ],
            "description": "Bid amount stored for the keyword; null when none is set"
          }
        },
        "required": [
          "id",
          "term",
          "language",
          "country",
          "bid"
        ],
        "additionalProperties": false
      },
      "maxItems": 500,
      "description": "Tracked keywords for the app, at most 500 per call"
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 500
    },
    "truncated": {
      "type": "boolean",
      "description": "True when more than 500 keywords matched; page with skip"
    }
  },
  "required": [
    "status",
    "keywords",
    "offset",
    "returned",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search_store_results(store, term, country, lang, num)

Use this when someone asks which apps show up for a search term, or who their competitors are for a keyword, on the App Store, Mac App Store, Google Play or Microsoft Store. Returns the live results in rank order with store id, title, rating and developer (10 by default, up to 200). Not for one app's own position.

Input Schema

{
  "type": "object",
  "properties": {
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ],
      "description": "Store to search: ios-app-store, macos-app-store, google-play or microsoft-store"
    },
    "term": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search term as a user would type it in the store, 1 to 200 characters"
    },
    "country": {
      "type": "string",
      "maxLength": 10,
      "description": "Two-letter store country code such as US or IT; defaults to US"
    },
    "lang": {
      "type": "string",
      "maxLength": 32,
      "description": "Two-letter language code such as en or it; defaults to en except on Google Play, which uses the store default"
    },
    "num": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200,
      "description": "Number of results to return, from 1 to 200; defaults to 10"
    }
  },
  "required": [
    "store",
    "term"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ]
    },
    "term": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 10
        },
        {
          "type": "null"
        }
      ]
    },
    "lang": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer",
            "exclusiveMinimum": 0,
            "maximum": 200
          },
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ]
          },
          "title": {
            "$ref": "#/properties/results/items/properties/id"
          },
          "score": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000
              },
              {
                "type": "null"
              }
            ],
            "description": "Rating score as the store reports it"
          },
          "developer": {
            "$ref": "#/properties/results/items/properties/id"
          }
        },
        "required": [
          "rank",
          "id",
          "title",
          "score",
          "developer"
        ],
        "additionalProperties": false
      },
      "maxItems": 200,
      "description": "Live search results in store rank order; nothing is stored in AppSkyline"
    },
    "truncated": {
      "type": "boolean",
      "description": "True when the store returned more than 200 results"
    }
  },
  "required": [
    "status",
    "store",
    "term",
    "country",
    "lang",
    "results",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_keyword_rank(appId, store, term, country, lang, ...)

Use this when someone asks where their app ranks for a keyword right now in one store and country. Returns the app's live position, or not-ranked, after scanning the top 50 results by default and up to 200, and renders a rank card. Not for how a rank changed over time.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ],
      "description": "Store to check: ios-app-store, macos-app-store, google-play or microsoft-store; the app needs an id on that store"
    },
    "term": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search term to check, 1 to 200 characters"
    },
    "country": {
      "type": "string",
      "maxLength": 10,
      "description": "Two-letter store country code such as US or IT; defaults to US"
    },
    "lang": {
      "type": "string",
      "maxLength": 32,
      "description": "Two-letter language code such as en or it; defaults to en except on Google Play, which uses the store default"
    },
    "num": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200,
      "default": 50,
      "description": "How many search results to scan for the app, from 1 to 200; defaults to 50"
    }
  },
  "required": [
    "appId",
    "store",
    "term"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "ranked",
        "not-ranked",
        "app-not-found",
        "store-not-configured"
      ]
    },
    "app": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          "required": [
            "id",
            "name"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "term": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ]
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 10
        },
        {
          "type": "null"
        }
      ]
    },
    "lang": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "rank": {
      "anyOf": [
        {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 200
        },
        {
          "type": "null"
        }
      ],
      "description": "1-based position; null unless status is ranked"
    },
    "resultsScanned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 200,
      "description": "How many results were scanned; report a rank as #N of this"
    }
  },
  "required": [
    "status",
    "app",
    "term",
    "store",
    "country",
    "lang",
    "rank",
    "resultsScanned"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_keyword_history(appId, store, term, country, limit)

Use this when someone asks how their app's ranking for a keyword has changed over time in one store and country. Returns the app's rank on each date AppSkyline stored a search snapshot, newest first, up to 365 rows; tracked keywords are re-checked weekly. Not for today's live rank.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ],
      "description": "Store to read: ios-app-store, macos-app-store, google-play or microsoft-store; the app needs an id on that store"
    },
    "term": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Search term to read history for, 1 to 200 characters"
    },
    "country": {
      "type": "string",
      "minLength": 1,
      "maxLength": 10,
      "description": "Two-letter store country code such as US or IT (required)"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 365,
      "description": "Snapshots to return, newest first, from 1 to 365; defaults to 365"
    }
  },
  "required": [
    "appId",
    "store",
    "term",
    "country"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "app-not-found",
        "store-not-configured",
        "no-history"
      ]
    },
    "app": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          "required": [
            "id",
            "name"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ]
    },
    "term": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 10
        },
        {
          "type": "null"
        }
      ]
    },
    "snapshots": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "rank": {
            "anyOf": [
              {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "resultsScanned": {
            "type": "integer",
            "minimum": 0,
            "maximum": 200
          },
          "resultsTruncated": {
            "type": "boolean"
          }
        },
        "required": [
          "date",
          "rank",
          "resultsScanned",
          "resultsTruncated"
        ],
        "additionalProperties": false
      },
      "maxItems": 365,
      "description": "One row per stored search snapshot, newest first; rank is null when the app was not in that snapshot"
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 365
    },
    "totalSnapshots": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "totalSnapshotsIsLowerBound": {
      "type": "boolean"
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "app",
    "store",
    "term",
    "country",
    "snapshots",
    "returned",
    "totalSnapshots",
    "totalSnapshotsIsLowerBound",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_keyword_overview(terms, country, lang)

Use this when someone asks how popular a keyword is or which keyword ideas are worth targeting. Returns monthly Google web-search volume (a demand proxy, not app-store search counts), difficulty, CPC and competition for up to 50 terms in one country. Terms missing from the 30-day cache trigger a billable lookup. Not for rankings.

Input Schema

{
  "type": "object",
  "properties": {
    "terms": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200,
        "pattern": "^[^,]+$"
      },
      "minItems": 1,
      "maxItems": 50,
      "description": "Keyword ideas to look up in one batch, 1 to 50 terms of up to 200 characters, none containing a comma"
    },
    "country": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2,
      "pattern": "^[A-Za-z]{2}$",
      "description": "Two-letter country code such as US or IT (required)"
    },
    "lang": {
      "type": "string",
      "maxLength": 32,
      "description": "Two-letter language code such as en or it; optional"
    }
  },
  "required": [
    "terms",
    "country"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "country": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "lang": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "keyword": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "searchVolume": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 1000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "keywordDifficulty": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "cpc": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000
              },
              {
                "type": "null"
              }
            ]
          },
          "competition": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 50
              },
              {
                "type": "null"
              }
            ]
          },
          "fetchedAt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "keyword",
          "searchVolume",
          "keywordDifficulty",
          "cpc",
          "competition",
          "fetchedAt"
        ],
        "additionalProperties": false
      },
      "maxItems": 50,
      "description": "Google web-search demand per term from the shared 30-day cache, highest volume first; a proxy for interest, not app-store search counts"
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 50
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "country",
    "lang",
    "keywords",
    "returned",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_store_listing(store, storeId, country, lang)

Use this when someone asks about a competitor's or any app's public store page, such as its rating, number of ratings, price, version or last update. Returns the live listing for one store id, with description and release notes cut to 600 characters. Not for your own app's synced text per language.

Input Schema

{
  "type": "object",
  "properties": {
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ],
      "description": "Store to read: ios-app-store, macos-app-store, google-play or microsoft-store"
    },
    "storeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The app's id in that store: numeric Apple id, Google Play package name such as com.example.app, or Microsoft Store product id"
    },
    "country": {
      "type": "string",
      "maxLength": 10,
      "description": "Two-letter store country code such as US or IT; defaults to the store's own default"
    },
    "lang": {
      "type": "string",
      "maxLength": 32,
      "description": "Two-letter language code such as en or it; defaults to the store's own default"
    }
  },
  "required": [
    "store",
    "storeId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ]
    },
    "storeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "country": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 10
        },
        {
          "type": "null"
        }
      ]
    },
    "lang": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "listing": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "developer": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "developerId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 300
                },
                {
                  "type": "null"
                }
              ]
            },
            "score": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1000000
                },
                {
                  "type": "null"
                }
              ],
              "description": "Average rating as the store reports it"
            },
            "ratings": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000000
                },
                {
                  "type": "null"
                }
              ]
            },
            "price": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "free": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "currency": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "version": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "released": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "updated": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "requiredOsVersion": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 100
                },
                {
                  "type": "null"
                }
              ]
            },
            "genres": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 100
              },
              "maxItems": 20
            },
            "screenshotCount": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000
            },
            "description": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 600
                },
                {
                  "type": "null"
                }
              ]
            },
            "releaseNotes": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 600
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "title",
            "developer",
            "developerId",
            "score",
            "ratings",
            "price",
            "free",
            "currency",
            "version",
            "released",
            "updated",
            "requiredOsVersion",
            "genres",
            "screenshotCount",
            "description",
            "releaseNotes"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "The live public listing; description and release notes are cut to 600 characters. Null when the store has no app with that id."
    }
  },
  "required": [
    "status",
    "store",
    "storeId",
    "country",
    "lang",
    "listing"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_store_metadata(appId, store, locale)

Use this when someone asks about their own app's listing text per language, such as the title, subtitle, keywords or release notes, or whether the latest version is still in review or approved. Returns the metadata AppSkyline last synced for each locale, with the version, its review state and the keyword field's length against Apple's 100-character limit; longer texts are cut to 600 characters. Not for a live competitor listing.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ],
      "description": "Store listing to read: ios-app-store, macos-app-store, google-play or microsoft-store"
    },
    "locale": {
      "type": "string",
      "maxLength": 32,
      "description": "Only this locale, written as in the listing such as en-US or it; every synced locale when absent"
    }
  },
  "required": [
    "appId",
    "store"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ]
    },
    "localeFilter": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 32
        },
        {
          "type": "null"
        }
      ]
    },
    "listings": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "locale": {
            "type": "string",
            "minLength": 1,
            "maxLength": 32
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "subtitle": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ]
          },
          "keywords": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "keywordCharacters": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "promotionalText": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 600
              },
              {
                "type": "null"
              }
            ]
          },
          "whatsNew": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 600
              },
              {
                "type": "null"
              }
            ]
          },
          "description": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 600
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "state": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "lastSyncedAt": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "locale",
          "name",
          "subtitle",
          "keywords",
          "keywordCharacters",
          "promotionalText",
          "whatsNew",
          "description",
          "version",
          "state",
          "lastSyncedAt"
        ],
        "additionalProperties": false
      },
      "maxItems": 100,
      "description": "Metadata as last synced into AppSkyline, one row per locale; it may differ from what the store shows now. Long texts are cut to 600 characters."
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "appId",
    "store",
    "localeFilter",
    "listings",
    "returned",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_app_engagement_summary(appId, store, startDate, endDate, days)

Use this when someone asks how many downloads, installs, uninstalls or crashes their app had over a period. Returns store-reported totals, the latest 30 daily rows and top countries for one app and store; metric names differ by store. Not for keyword rankings.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ],
      "description": "Store to summarize: ios-app-store, macos-app-store, google-play or microsoft-store"
    },
    "startDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "First day of the window as YYYY-MM-DD; applies only together with endDate"
    },
    "endDate": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Last day of the window as YYYY-MM-DD; applies only together with startDate"
    },
    "days": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 365,
      "description": "Rolling window of the last 1 to 365 days, used when no dates are given; omit dates and days for every synced day"
    }
  },
  "required": [
    "appId",
    "store"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "empty"
      ]
    },
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "store": {
      "type": "string",
      "enum": [
        "ios-app-store",
        "macos-app-store",
        "google-play",
        "microsoft-store"
      ]
    },
    "dataThrough": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 64
        },
        {
          "type": "null"
        }
      ]
    },
    "lastSyncedAt": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 64
        },
        {
          "type": "null"
        }
      ]
    },
    "totals": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "value": {
            "type": "number",
            "minimum": -1000000000000000,
            "maximum": 1000000000000000
          }
        },
        "required": [
          "name",
          "value"
        ],
        "additionalProperties": false
      },
      "maxItems": 30,
      "description": "Store-reported totals for the window; metric names differ by store"
    },
    "totalsTruncated": {
      "type": "boolean"
    },
    "topTerritories": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      },
      "maxItems": 8,
      "description": "Up to 8 leading countries or territories by downloads or installs"
    },
    "dailySeries": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "rows": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "date": {
                    "anyOf": [
                      {
                        "type": "string",
                        "maxLength": 32
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "metrics": {
                    "type": "array",
                    "items": {
                      "$ref": "#/properties/totals/items"
                    },
                    "maxItems": 6
                  }
                },
                "required": [
                  "date",
                  "metrics"
                ],
                "additionalProperties": false
              },
              "maxItems": 30
            },
            "totalRows": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000000
            },
            "totalRowsIsLowerBound": {
              "type": "boolean"
            },
            "truncated": {
              "type": "boolean"
            }
          },
          "required": [
            "name",
            "rows",
            "totalRows",
            "totalRowsIsLowerBound",
            "truncated"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "The most recent 30 days of one daily metric series"
    }
  },
  "required": [
    "status",
    "appId",
    "store",
    "dataThrough",
    "lastSyncedAt",
    "totals",
    "totalsTruncated",
    "topTerritories",
    "dailySeries"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_google_play_reviews(appId, maxResults, token, translationLanguage)

Use this when someone asks what users say about their Android app on Google Play, or about recent ratings and complaints. Returns reviews with stars, text cut to 300 characters, app version, device, language and whether the developer replied, up to 100 per page. Google Play only returns reviews from the last 7 days. Not for App Store reviews.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid); the app needs a Google Play service account in AppSkyline"
    },
    "maxResults": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Reviews to return per page, from 1 to 100"
    },
    "token": {
      "type": "string",
      "maxLength": 2000,
      "description": "nextPageToken from the previous page; absent for the first page"
    },
    "translationLanguage": {
      "type": "string",
      "maxLength": 32,
      "description": "Translate review text into this language, such as en; omit to keep the original language"
    }
  },
  "required": [
    "appId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "available",
        "empty",
        "not-configured"
      ]
    },
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "reviews": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "reviewId": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ]
          },
          "author": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "stars": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1,
                "maximum": 5
              },
              {
                "type": "null"
              }
            ]
          },
          "date": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "version": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "device": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "language": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "replied": {
            "type": "boolean"
          },
          "text": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "reviewId",
          "author",
          "stars",
          "date",
          "version",
          "device",
          "language",
          "replied",
          "text"
        ],
        "additionalProperties": false
      },
      "maxItems": 100,
      "description": "Reviews created or edited in the last 7 days, as the Google Play API returns them; review text is cut to 300 characters"
    },
    "returned": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "nextPageToken": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 2000
        },
        {
          "type": "null"
        }
      ],
      "description": "Pass as token to get the next page; null on the last page"
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "appId",
    "reviews",
    "returned",
    "nextPageToken",
    "truncated"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴add_keyword(appId, searchTerms, language, country)

Use this when someone asks to start tracking a keyword for their app in a given language and country. Returns the new keyword; adding the same term twice creates two rows. Keywords without a country are skipped by the weekly rank check. Not for a one-off rank lookup.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    },
    "searchTerms": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Keyword phrase to track, as users type it in the store, 1 to 200 characters"
    },
    "language": {
      "type": "string",
      "maxLength": 32,
      "description": "Two-letter language code such as en"
    },
    "country": {
      "type": "string",
      "maxLength": 10,
      "description": "Two-letter store country code such as US; without one the weekly rank check skips this keyword"
    }
  },
  "required": [
    "appId",
    "searchTerms"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "added"
    },
    "keyword": {
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 200
            },
            {
              "type": "null"
            }
          ]
        },
        "appId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "term": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "language": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 32
            },
            {
              "type": "null"
            }
          ]
        },
        "country": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 10
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "appId",
        "term",
        "language",
        "country"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "status",
    "keyword"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_keyword(id)

Use this when someone asks to stop tracking one of their keywords. Returns deleted, or not-found for an unknown id or one outside the account. Weekly rank checks stop and past snapshots stay, leaving a gap if it is tracked again later. Not for pausing tracking temporarily.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Keyword id"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "deleted",
        "not-found"
      ]
    },
    "keywordId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    }
  },
  "required": [
    "status",
    "keywordId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢open_appskyline

Use this when someone wants to open AppSkyline and browse their workspace interactively. Apps, connected stores and tracked keywords. Starts with up to 100 items. Not for changing data.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "subtitle": {
            "type": "string",
            "maxLength": 300
          },
          "logoUrl": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2048
              },
              {
                "type": "null"
              }
            ]
          },
          "defaultLocale": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "locales": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 32
            }
          }
        },
        "required": [
          "id",
          "name",
          "subtitle",
          "logoUrl",
          "defaultLocale",
          "locales"
        ],
        "additionalProperties": false
      }
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "items",
    "truncated"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}
🟢show_app_overview(appId)

Use this when someone wants a quick overview of one of the apps they track in AppSkyline. Returns an overview card with the app's connected stores, locales and up to 50 tracked keywords. Not for keyword rankings.

Input Schema

{
  "type": "object",
  "properties": {
    "appId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "AppSkyline app id (uuid)"
    }
  },
  "required": [
    "appId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "app": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "name": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "defaultLocale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "locales": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 32
              }
            },
            "iosAppStoreId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "macosAppStoreId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "googlePlayId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "microsoftStoreId": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "defaultLocale",
            "locales",
            "iosAppStoreId",
            "macosAppStoreId",
            "googlePlayId",
            "microsoftStoreId"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "keywordCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000
    },
    "storeCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 4
    },
    "keywords": {
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "term": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "language": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 10
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "term",
          "language",
          "country"
        ],
        "additionalProperties": false
      },
      "description": "The first 50 tracked keywords; keywordCount has the total"
    }
  },
  "required": [
    "app",
    "keywordCount",
    "storeCount",
    "keywords"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools
verifiedversion not recorded14 tools
verifiedversion not recorded14 tools