[NEW] //VisualASO 1.0 for Mac. Free to start. See pricing →

Let your agent use VisualASO

The VisualASO app is also an MCP server. An agent such as Claude Code or Codex can check your keywords, read the Board and draft a listing, against the same database the app uses.

Connect Claude Code

claude mcp add --scope user visualaso -- "/Applications/VisualASO.app/Contents/MacOS/VisualASO" --mcp

In VisualASO, Help → Copy MCP Install Command copies the same line with the path of the copy you run.

Connect Codex

codex mcp add visualaso -- "/Applications/VisualASO.app/Contents/MacOS/VisualASO" --mcp

Or add it to ~/.codex/config.toml:

[mcp_servers.visualaso]
command = "/Applications/VisualASO.app/Contents/MacOS/VisualASO"
args = ["--mcp"]

What agents can and cannot do

  • Agents read and change your local VisualASO data, start checks and draft listings, as the app can (Pro).
  • Publishing is off. An agent can write to App Store Connect only after you turn on Allow agents to publish for that app in Optimize, and even then it starts as a dry run that writes nothing.
  • No agent can submit a version for review. VisualASO cannot do that either.
  • The app and the server can run at the same time; changes an agent makes show up in the app.

Every tool

69 tools, generated from the server's own list. read reads only; writes changes your local data or starts a check; store write can change App Store Connect and only does so when you allow it.

Start here

ToolWhat it doesKind
ai_statusShows which AI CLIs (Claude Code, Codex, OpenCode, Ollama) are installed and their models.read
markets_listLists every storefront code with its country, language, locales, market size and payments flag.read
overviewOne line per tracked entry with markets, keyword counts, check status, audit stage, and running jobs.read
settings_saveSaves app-wide settings for the AI tool, checks, display, and default markets.writes
statusLists tracked apps, markets, connections, and recent jobs. Start here.read

Apps and folders

ToolWhat it doesKind
app_addStarts tracking an app from its App Store URL or ID and kicks off background work.writes
app_addAllStarts tracking every App Store Connect app that isn't tracked yet, as your own apps.writes
app_autoCheckSets how often an app is automatically re-checked.writes
app_contextSaves or replaces an app's product brief, which later AI work uses. Empty clears it.writes
app_fetchRe-reads an app's name, subtitle, description and (with App Store Connect) keyword field for each locale.writes
app_kindMoves an app between My Apps and Competitors.writes
app_marketsSets an app's tracked countries and their display order.writes
app_moveMoves an entry to a sidebar folder, optionally above another entry.writes
app_playPackageSets (or clears, with an empty value) the app's Google Play package, which turns on Google Play checks.writes
app_removeStops tracking an app and deletes its keywords. Destructive.writes (removes data)
folder_createCreates a sidebar folder and returns its ID.writes
folder_removeDeletes a folder; its entries move back to their default lists.writes (removes data)
folder_renameRenames a sidebar folder.writes
session_createStarts a keyword brainstorm from a topic, without an app.writes
store_searchFinds the top 8 App Store apps for a name, niche, or App Store link.read

Keywords

ToolWhat it doesKind
board_getReturns the keyword grid with ranks, demand, difficulty, and verdicts per market, plus competitors and chat.read
coverage_getWhich listing words each tracked phrase relies on per market, which localizations each market reads, and wasted characters.read
keyword_addTracks a new English keyword, with optional per-market phrases.writes
keyword_hideHides or shows a keyword without deleting it.writes
keyword_localizeWrites a native phrase for every tracked market missing one (English-first language check), then checks it.writes
keyword_removeStops tracking a keyword in every market. Destructive.writes (removes data)
keyword_updateRenames a keyword's English phrase.writes
term_getReturns one keyword's rank history, demand and difficulty breakdown, and top apps for one market.read
term_setSets the phrase one market uses for a keyword. Empty text removes the override; "-" stops tracking it there.writes

Checks and jobs

ToolWhat it doesKind
check_resumeContinues a stopped or interrupted check run from its next unchecked cell (cells saved since the run began are skipped). Without jobId, the app's last resumable run.writes
check_runSearches every keyword in each market for rank, demand and difficulty (true App Store order), or Google Play ranks with store=play. Paced for Apple's and Google's limits; resumable.writes
job_stopStops a running job for an app.writes
probe_planPlans an index probe: one unique word per localization (plus negative controls) to plant in the next version's keyword fields.writes
probe_runReads which storefronts rank each planted probe word and saves the app's own index map.writes
waitWaits until a job changes state or the time runs out, then returns. Call again while jobs run.read

Competitors and opportunities

ToolWhat it doesKind
opportunitiesRanks the best starting points: high demand, low difficulty, few strong incumbents.read

Optimize (listing audit)

ToolWhat it doesKind
audit_chooseSets the final main-listing name, subtitle, and keywords, plus core phrases.writes
audit_clearDeletes the app's listing audit. Destructive.writes (removes data)
audit_englishAudit step 1: proposes three main-listing options in the main locale.writes
audit_getReturns the app's listing audit, or its Markdown export when export is true.read
audit_locale_pickSwaps a locale's core keyword for another tested phrase; the AI rewrites that locale.writes
audit_locale_setManually edits one locale's proposed fields.writes
audit_localizeAudit step 2: writes listings for each App Store locale from tested phrases, keyword fields allocated per storefront.writes
audit_measureSearches each phrase in the main listing's store and saves the results.writes
audit_moreGenerates additional main-listing options, keeping existing ones.writes
audit_option_addAdds your own main-listing option to the audit.writes
audit_option_removeRemoves one main-listing option from the audit. Destructive.writes (removes data)
audit_option_updateEdits an existing audit option in place.writes
audit_publishWrites the audit into App Store Connect as an unsubmitted version. Refused unless the app allows agent publishing. Never submits for review. Destructive.store write
next_versionShows the editable App Store Connect version and the next version number.read

History, changes and funnel

ToolWhat it doesKind
change_recordRecords a listing change made outside the app, so it gets a 21-day verdict.writes
changes_getThe listing change log with 21-day verdicts, and per-tactic hit rates.read
funnel_getImpressions → page views → downloads per source (search, browse, referrers) from App Store Connect analytics.read

Researcher and brainstorm

ToolWhat it doesKind
agent_askSends a message to the in-app keyword researcher, which may propose keyword or audit actions.writes
agent_clearClears the researcher chat for an app. Destructive.writes (removes data)
keywords_brainstormHas the AI rebuild an app's keyword list from its listing plus ideas, then checks new phrases.writes
session_updateRenames a brainstorm or changes its topic.writes

Imports and outside readings

ToolWhat it doesKind
appleads_connectSaves an Apple Ads API account for the read-only popularity pull; the key goes to the Keychain. Pass a JSON file with the ids and the key's path, or the four ids and the key file.writes
appleads_popularityApple's search popularity (5-100) for any terms in one storefront, read from the user's own signed-in Apple Ads account (one allow-listed read request; nothing can be created or spent). 5 is Apple's floor: below what Apple shows, not measured. Uses today's stored readings first. Refuses when not signed in or the sign-in expired.writes
appleads_pullReads Apple's weekly search popularity charts (top 500 per country × genre) into the database as a background job. Read-only insight queries: nothing can spend. Defaults to every tracked app's markets and genres, newest complete week.writes
asc_appsLists every app visible to the connected App Store Connect accounts.read
asc_connectSaves an App Store Connect API key as a developer account (key stored in the Keychain).writes
asc_disconnectRemoves one App Store Connect account, or all if none is given. Destructive.writes (removes data)
asc_testChecks saved App Store Connect keys with Apple and reports the apps they can see.writes
astro_getReturns the Astro data saved for an app's phrases: popularity (raw and calibrated) and difficulty.read
import_appleadsImports Apple Ads search popularity rows from a JSON Lines file, one row per term and country: Apple's own 1-100 scale, and the chart floor that caps phrases absent from it.writes
import_asoImports keyword, rank and listing-change history from a folder of JSON files: keywords, ranks, change logs and Apple Ads popularity.writes
import_astroImports keyword evidence from an Astro export (CSV or JSON), optionally as a preview only.writes
revenue_getRevenue per market from RevenueCat (read-only), used to weight opportunities. pull=true fetches a fresh reading first.read

Something unclear or out of date? Write to hello@musthaveappscorp.com.