MCP server
Connect Claude, Cursor, VS Code, ChatGPT and other AI tools to your Cortex ASO workspace with the hosted MCP server.
The Cortex ASO MCP server is a hosted Model Context Protocol server that exposes your workspace data and actions to AI tools. Once connected, an assistant can read keyword ranks, reviews, alerts and ad performance, and (when you ask it to) change data such as tracked keywords or ad campaigns. Every request acts as the workspace that owns the API key.
What you need
- The Solo plan or above. Plans without CLI/MCP access cannot create keys.
- An Owner or Admin role in the workspace.
- An MCP client that supports remote servers over Streamable HTTP.
Connection details
| Setting | Value |
|---|---|
| URL | https://api.cortexaso.com/api/mcp |
| Transport | Streamable HTTP |
| Header | Authorization: Bearer <YOUR_API_KEY> |
| Markdown doc (for AI / LLMs) | /docs/llms.mdx/mcp/content.md |
Create an API key
- Open Settings → API Keys & MCP.
- Select Create key and give it a name, for example the tool it is for.
- Copy the key immediately. It is shown once and cannot be retrieved later.
Create one key per tool so you can revoke each independently. Revoke a key at any time from the same page; the tool loses access straight away.
Set up your tool
Replace <YOUR_API_KEY> with your key in every snippet.
Claude Code
claude mcp add --transport http cortex https://api.cortexaso.com/api/mcp --header "Authorization: Bearer <YOUR_API_KEY>"Claude Desktop
Open Settings → Developer → Edit Config and merge this into claude_desktop_config.json, then restart the app. It uses mcp-remote and requires Node.js. Other clients that only support local servers can use the same entry.
{
"mcpServers": {
"cortex": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.cortexaso.com/api/mcp",
"--header",
"Authorization: Bearer <YOUR_API_KEY>"
]
}
}
}Cursor
Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json inside a single project.
{
"mcpServers": {
"cortex": {
"url": "https://api.cortexaso.com/api/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}VS Code
Add this to .vscode/mcp.json in your project (GitHub Copilot agent mode).
{
"servers": {
"cortex": {
"type": "http",
"url": "https://api.cortexaso.com/api/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}ChatGPT
In ChatGPT, enable developer mode and add a custom MCP connector (Settings → Connectors; the menu name varies by plan). Enter the URL https://api.cortexaso.com/api/mcp, choose Streamable HTTP, and add the header Authorization: Bearer <YOUR_API_KEY>. Availability depends on your ChatGPT plan and workspace settings.
Other clients
Any client that supports remote MCP servers over Streamable HTTP needs these three values:
URL: https://api.cortexaso.com/api/mcp
Transport: Streamable HTTP
Header: Authorization: Bearer <YOUR_API_KEY>Tools
The server exposes 103 tools. Write tools change data in Cortex or in a connected store or ad account. Ad and store write tools default to a dry run or preview, and only apply the change when you confirm it. Read tools never change anything.
Projects and apps
| Tool | Type | What it does |
|---|---|---|
cortex_project_list | Read | List the organization projects (tracked apps) with their store app |
cortex_project_create | Write | Create a project for an app and finish its onboarding so keyword and metadata tools can use it |
cortex_project_update_markets | Write | Add or remove storefront countries of a project |
cortex_project_delete | Write | Delete a project with its markets, tracked keywords and ranking history |
cortex_app_resolve | Read | Resolve a public app on the iOS App Store or Google Play Store |
cortex_app_details | Read | Public store page of any app on the iOS App Store or Google Play in one country, including name, rating, description, screenshots and similar apps. |
Keywords and rankings
| Tool | Type | What it does |
|---|---|---|
cortex_keyword_search | Read | Search for keyword suggestions and autocomplete data from app stores |
cortex_serp_explore | Read | Explore the search engine results page (SERP) for a keyword to see which apps rank for it |
cortex_keyword_list | Read | List tracked keywords for a project |
cortex_keyword_ranks | Read | Get current ranking for a tracked keyword |
cortex_keyword_history | Read | Get historical ranking data for a tracked keyword |
cortex_keyword_track | Write | Track keywords in one storefront of a project |
cortex_keyword_remove | Write | Stop tracking keywords by trackedKeywordId (from cortex_keyword_list) |
cortex_keyword_set_status | Write | Pause or resume tracked keywords |
cortex_rank_changes | Read | Project-wide keyword rank movers over a window |
cortex_keyword_collect_now | Write | Queue a fresh rank scan of all tracked keywords of a project and return immediately; poll cortex_operation_status for the outcome. |
cortex_operation_status | Read | Poll a queued operation from cortex_keyword_collect_now or an async cortex_metadata_generate until it is queued, running, completed or failed. |
Competitors
| Tool | Type | What it does |
|---|---|---|
cortex_competitor_add | Write | Track competitor apps of a project by store appId or storeUrl (up to 10 per call, 20 enabled per project) |
cortex_competitor_remove | Write | Stop tracking competitors by competitorId |
cortex_competitor_list | Read | List the tracked competitors of a project with their store app summary (competitorId, appId, name, platform) |
cortex_competitor_compare | Read | Compare the project app against its tracked competitors on the newest stored rank scan per keyword, including own rank and each competitor rank (null means beyond scan depth). |
Metadata and store listing
| Tool | Type | What it does |
|---|---|---|
cortex_metadata_draft_get | Read | Read the saved draft versions the Editor shows: the latest version for one storefront, or each storefront's latest version. |
cortex_metadata_history | Read | Get historical metadata versions for a project |
cortex_listing_keywords | Read | Read any public App Store or Google Play listing link and return ranked keywords from its title, subtitle or short description, and description |
cortex_metadata_live_listing | Read | Get the live listing metadata for a project directly from the store |
cortex_metadata_generate | Write | Generate marketing copy and metadata drafts |
cortex_metadata_draft_save | Write | Save reviewed listing text as a new version of the draft for one market, so the Editor and the publish tools can pick it up |
cortex_metadata_lint | Read | Lint listing text against the store limits and ASO rules with no AI call and nothing saved. |
cortex_metadata_publish | Write | Publish saved metadata drafts to the app's store listing (Google Play for Android projects, App Store for iOS projects) |
cortex_release_notes_update | Write | Update the "what's new" release notes of one store release |
Reviews
| Tool | Type | What it does |
|---|---|---|
cortex_reviews_list | Read | List stored store reviews of a project, newest first, with the reviewer display name, storefront, developer reply and any saved AI draft. |
cortex_review_reply | Write | Reply publicly to a stored store review (the reviewId from cortex_reviews_list; Google Play or App Store) |
cortex_reviews_summary | Read | Summarize stored store reviews of a project into a rating histogram, themes, complaints, praise and recommendations. |
Alerts
| Tool | Type | What it does |
|---|---|---|
cortex_alerts_list | Read | List stored alerts of a project, newest first, each with severity, status (open/resolved/dismissed), link, resolvedAt, title and message |
cortex_alerts_summary | Read | Count the unread alerts of a project in total and per severity (critical, warning, info) |
cortex_alerts_acknowledge | Write | Mark alerts of a project as read, resolved or dismissed (status) |
cortex_alerts_config_get | Read | Return the effective configuration of every alert type for a project, including isEnabled, thresholds, cooldownHours and channels. |
cortex_alerts_config_update | Write | Update the configuration of one alert type for a project, including isEnabled, thresholds, delivery, cooldownHours and channels. |
cortex_alerts_test | Write | Send a sample instant alert e-mail for an alert type to the e-mail address of the API key creator, to verify delivery |
Apple Ads
| Tool | Type | What it does |
|---|---|---|
cortex_apple_ads_cannibalization | Read | Analyze cannibalization of organic installs by paid Apple Search Ads |
cortex_apple_ads_cpa_simulate | Read | Simulate CPA (Cost Per Acquisition) feasibility against targets |
cortex_apple_ads_campaigns | Read | List Apple Ads campaigns with performance metrics |
cortex_apple_ads_keywords | Read | Keyword-level Apple Ads performance (impressions, taps, installs, spend, CPA) aggregated over the last N days, live from Apple (window ends today) |
cortex_apple_ads_impression_share | Read | Share of voice for the project's app on Apple Ads search terms over the last N days, live from Apple. |
cortex_apple_ads_ads | Read | Ad-level Apple Ads performance over the last N days, live from Apple, for the project's app campaigns or one of them. |
cortex_apple_ads_update_bid | Write | Adjust keyword bid for an Apple Ads campaign |
cortex_apple_ads_negative_propagation | Write | Mine negative keyword candidates and optionally propagate them |
cortex_apple_ads_create_campaign | Write | Create an Apple Ads campaign with one ad group, optional keywords and optional custom product page |
cortex_apple_ads_set_status | Write | Pause or resume an Apple Ads campaign or ad group |
cortex_apple_ads_update_campaign | Write | Edit an Apple Ads campaign: name, end date (null clears it), storefront countries (full replacement set) and daily budget |
cortex_apple_ads_update_ad_group | Write | Edit an Apple Ads ad group: name, default bid, start and end dates |
cortex_apple_ads_add_keywords | Write | Add up to 100 targeting keywords to an Apple Ads ad group |
cortex_apple_ads_update_assets | Write | Point an Apple Ads ad group at a custom product page, or pass productPageId null to fall back to the default product page |
cortex_apple_ads_campaign_detail | Read | One Apple Ads campaign of the project's app with its ad groups and targeting keywords, live from Apple |
cortex_apple_ads_ad_groups | Read | List the ad groups of an Apple Ads campaign of the project's app (id, name, status, default bid, dates), live from Apple |
cortex_apple_ads_search_popularity | Read | Apple search popularity (1-100, null when unknown) for up to 100 terms in one country, live from Apple Ads |
cortex_apple_ads_search_terms | Read | Stored Apple Ads search-term performance per campaign, ad group and term (impressions, taps, installs, spend, TTR, CPA) over the last N days |
cortex_apple_ads_negatives | Read | List the negative keywords of an Apple Ads campaign and its ad groups (or one ad group), live from Apple |
cortex_apple_ads_bid_recommendations | Read | Bid recommendations per keyword toward a target CPA, from stored search-term performance |
cortex_apple_ads_keyword_opportunities | Read | Converting Apple Ads search terms not yet targeted as keywords, from stored performance over the last N days (installs and taps) |
cortex_apple_ads_product_pages | Read | List custom product pages for an App Store app by its adamId (live or cached) |
cortex_apple_ads_add_negatives | Write | Add up to 20 negative keywords to an Apple Ads campaign, or to one of its ad groups when adGroupId is given |
Google Ads
| Tool | Type | What it does |
|---|---|---|
cortex_google_ads_cannibalization | Read | Analyze cannibalization of organic installs by paid Google Ads |
cortex_google_ads_cpa_simulate | Read | Simulate CPA (Cost Per Acquisition) feasibility against targets |
cortex_google_ads_campaigns | Read | List campaign id, name and status for the connected Google Ads account (no metrics; use cortex_google_ads_campaign_report for metrics) |
cortex_google_ads_keywords | Read | Keyword-level Google Ads performance aggregated over the last N days, live from Google. |
cortex_google_ads_assets | Read | Asset-level Google Ads performance over the last N days, live from Google, including type, text, field type and metrics. |
cortex_google_ads_campaign_report | Read | Live Google Ads campaign metrics for a date range (max 90 days), queried directly from the Google Ads API so figures match the Google Ads console |
cortex_google_ads_campaign_detail | Read | Live detail of one Google Ads campaign: campaign, its keywords with quality score, and its assets |
cortex_google_ads_negative_candidates | Read | Stored search terms of the last N synced days that waste spend, summed per campaign, ad group and term, as negative-keyword candidates. |
cortex_google_ads_search_terms | Read | Stored Google Ads search terms of the last N synced days (ending yesterday), aggregated per campaign, ad group and term |
cortex_google_ads_ad_groups | Read | Live Google Ads ad groups queried directly from the Google Ads API, optionally for one campaign and status |
cortex_google_ads_negatives | Read | Live Google Ads negative keywords at campaign and ad group level, queried directly from the Google Ads API. |
cortex_google_ads_keyword_ideas | Read | Live Google Ads keyword ideas for 1–20 seed phrases from Keyword Planner, with average monthly searches and competition. |
cortex_google_ads_keyword_opportunities | Read | Stored Google Ads search terms of the last N synced days that converted but are not yet keywords. |
cortex_google_ads_ads | Read | Live Google Ads ad performance over the last N days ending today, queried directly from the Google Ads API, summed per ad |
cortex_google_ads_budgets | Read | Live Google Ads campaign budgets of one linked account, queried directly from the Google Ads API. |
cortex_google_ads_conversion_actions | Read | Live Google Ads conversion actions of one linked account (live or cached 1h) |
cortex_google_ads_update_bid | Write | Execute actions on Google Ads campaigns |
cortex_google_ads_negative_propagation | Write | Mine negative keyword candidates and optionally propagate them |
cortex_google_ads_create_campaign | Write | Create a Google App campaign with one ad group and one app ad |
cortex_google_ads_set_status | Write | Pause or resume a Google Ads campaign or ad group |
cortex_google_ads_update_campaign | Write | Edit a Google Ads campaign name, end date, target countries, or target ROAS (a ratio of conversion value to spend, for example 1.5). |
cortex_google_ads_recommendation | Write | Apply or dismiss one active Google recommendation of a campaign |
cortex_google_ads_insights | Read | AI-written insights for one Google Ads campaign |
cortex_google_ads_breakdown | Read | Stored Google Ads cost, CPI, conversions and share of the project's campaigns per country, network or conversion action over the last N days. |
cortex_google_ads_update_ad_group | Write | Edit a Google Ads ad group: name, targetCpa (App ad groups only) or cpcBid (Search ad groups only) |
cortex_google_ads_add_keywords | Write | Add up to 100 keywords to a Google Ads Search ad group |
cortex_google_ads_update_assets | Write | Replace the headlines, descriptions, images or YouTube videos of a Google App ad |
cortex_google_ads_add_negatives | Write | Add up to 20 negative keywords to a Google Ads Search campaign, or to one of its ad groups when adGroupId is given |
Ads recommendations and activity
| Tool | Type | What it does |
|---|---|---|
cortex_ads_recommendations_list | Read | List open ads optimization recommendations for Apple Search Ads or Google Ads |
cortex_ads_recommendation_apply | Write | Apply an ads recommendation or preview the changes |
cortex_ads_recommendation_dismiss | Write | Dismiss an open ads recommendation so it is not shown or evaluated again for 30 days |
cortex_ads_activity | Read | Read the ads activity feed for Apple Search Ads or Google Ads, including actions, actor, source, diffs and 7-day evaluation. |
Revenue and attribution
| Tool | Type | What it does |
|---|---|---|
cortex_appsflyer_performance | Read | Query marketing attribution performance rows from AppsFlyer |
cortex_organic_uplift | Read | Daily organic installs from AppsFlyer for one country, with listing-publish days and tracked-keyword rank moves of five or more places. |
cortex_revenue_roas | Read | Calculate attributed ROAS and CPA per install joining ad spend with AppsFlyer attributed revenue and installs |
cortex_ads_overview | Read | One view of a project's paid acquisition for a date window across Apple Ads, Google Ads, AppsFlyer and joined ROAS. |
cortex_appsflyer_ltv | Read | Per-country cohort quality from AppsFlyer Cohort data, including installs, retention and LTV. |
cortex_appsflyer_skan | Read | iOS SKAdNetwork installs next to AppsFlyer-attributed non-organic installs per day (modelled: true) |
cortex_appsflyer_breakdown | Read | AppsFlyer installs, cost and revenue aggregated by adset or by ad, most installs first. |
Integrations and market data
| Tool | Type | What it does |
|---|---|---|
cortex_integrations_status | Read | Show which integrations the organization has connected and why their data may be empty. |
cortex_trending_charts | Read | Get the top trending apps for a specific category and platform |
The AppsFlyer and ROAS tools (cortex_appsflyer_*, cortex_organic_uplift, cortex_revenue_roas) are not available on all workspaces.
Tools that depend on an integration (Apple Ads, Google Ads, AppsFlyer, App Store Connect, Google Play) also need that integration linked to the workspace and the matching plan capability. cortex_integrations_status shows what is connected.
Example prompts
- Which of my keywords dropped this week?
- Summarize my latest App Store reviews and flag common complaints.
- Draft new metadata for my app and check it for length issues.
- Compare my rankings against my tracked competitors.
- Show last month's Apple Ads spend, installs and CPA by campaign.
Limits
- Requests are limited to 60 per minute per API key. Over the limit, the server answers with HTTP 429; retry after a short wait.
- Some tools have their own caps, for example a daily cap on test alert e-mails and on store listing commits, and tracked keywords count toward your plan quota.
- Tools that generate AI content, such as
cortex_google_ads_insightswithgenerate=true, use your workspace AI credits and daily quota.
Security
- Anyone holding a key can act as the workspace. Keep keys secret, never commit them to a repository, and do not paste them into shared chats.
- Revoke a key as soon as a tool no longer needs it or if it may have leaked.
- Prefer a dedicated key per tool and per person.
- Review the changes an assistant proposes before approving write actions, especially ad spend and store listing changes.