mcp server
open-aso
Open-source, local-first App Store Optimization workspace: keywords, rankings, competitors, App Store Connect, Apple Ads, PostHog & MCP
Set up
Runs on your computer. Pick your agent and operating system.
This project does not publish an install method we can turn into a config. Follow the README instead.
README
synced Oct 26, 2026Open ASO
Open-source App Store Optimization workspace — self-host it or run it as a multi-tenant SaaS. Research keywords, track rankings, watch competitors, edit your App Store listing, localize prices, run Apple Ads and connect your analytics — with Google sign-in, isolated workspaces and team invites.
Built with Next.js 16, React 19, Tailwind 4, Postgres and Better Auth. UI kit derived from the MIT-licensed Kargul sales-crm starter.
Features
| Area | What you get |
|---|---|
| Keywords | Tracked keywords per app and storefront with popularity, difficulty, targeting label, position + change, 30-day sparkline, estimated downloads, top-5 downloads/MRR, notes, likes, filters, CSV export, detail sheet with trend chart and version markers, top-apps sheet, background refresh |
| Suggestions | Keyword ideas from App Store search hints, top-ranking titles, competitors and recombinations (optional Claude-powered ideas), scored and one-click trackable; metadata insights for title/subtitle |
| Country opportunities | Scan one keyword across 66 storefronts, opportunity score, your rank, top competitor, world map |
| Explore & competitors | Search any app, profile with estimates, screenshots, ranking keywords, country presence map, similar apps; competitor tracking and keyword-by-keyword comparison |
| Reviews | Multi-storefront reviews, rating distribution, themes, optional AI summary |
| App Store page | App Store Connect metadata editor (name, subtitle, keywords, promo text, description, what's new) with keyword coverage, diff-before-save, locales, localization grid, US multi-locale keyword buckets, screenshots |
| Price localization | Subscriptions & IAPs: purchasing-power or equalized pricing snapped to Apple price points, scheduled changes |
| Apple Ads | OAuth setup, dashboard, campaigns / ad groups / keywords / negatives, bid & budget edits with diffs, campaign creation, cannibalization fix, playbook-driven recommendations |
| Analytics | Self-hosted install attribution (AdServices), RevenueCat & Superwall webhooks, overview, sources, geography, retention, keyword ROAS; PostHog product analytics |
| MCP server | 50 tools over Streamable HTTP with OAuth 2.1 sign-in (or a per-workspace static token) for Claude, Claude Code, Codex, Cursor and VS Code — read-only by default, guarded dry-run writes, plus a Claude Code / Codex plugin with ASO skills |
Popularity comes from Apple's own Search Ads popularity (Apple Ads Platform API) when a workspace or platform Apple Ads key is configured, and is otherwise estimated from App Store search suggestions; difficulty, download and revenue numbers are modeled estimates from public App Store data. Rankings come from the public iTunes Search API and can differ slightly from what a given device shows.
Connect your AI assistant
The MCP server lives at https://aso.french-web.com/api/mcp (or <your APP_URL>/api/mcp when self-hosting). Clients sign in with OAuth: a browser page opens, you pick the workspace and approve. A workspace admin first enables the server (and, optionally, write tools) in MCP Server; connected clients are listed there and can be disconnected.
- Claude Desktop / claude.ai: click Add to Claude on the dashboard or the MCP Server page — claude.ai opens the Add custom connector dialog with the name and URL pre-filled (Claude shows an "external link" notice; click Continue, then sign in). Manually: Settings → Connectors → Add custom connector, paste the URL.
- Claude Code plugin (tools + slash commands such as
/open-aso:keywords,/open-aso:audit,/open-aso:apple-ads+ ASO skills):
Then run/plugin marketplace add amintt2/open-aso /plugin install open-aso@open-aso/mcpand sign in. Without the plugin:claude mcp add --transport http open-aso https://aso.french-web.com/api/mcp. - Codex:
codex plugin marketplace add amintt2/open-asothencodex plugin add open-aso@open-aso, or just the server:codex mcp add open-aso --url https://aso.french-web.com/api/mcp(thencodex mcp login open-asoif it doesn't prompt). - Cursor: use Add to Cursor on the MCP Server page, or add
{ "mcpServers": { "open-aso": { "url": "https://aso.french-web.com/api/mcp" } } }to~/.cursor/mcp.json. - Clients without OAuth: generate a static token under MCP Server → Advanced and send
Authorization: Bearer <token>.
The plugins in plugins/open-aso point at the hosted instance; self-hosters use the URL-based commands above with their own domain.
Getting started (local)
npm install
docker run -d --name open-aso-pg -e POSTGRES_USER=open_aso -e POSTGRES_PASSWORD=open_aso -e POSTGRES_DB=open_aso -p 5433:5432 postgres:17-alpine
cp .env.example .env.local
npm run dev
Fill .env.local (see .env.example). Set OPEN_ASO_DEV_LOGIN=1 locally to get an e-mail sign-in without Google. Migrations run automatically on start.
Environment
| Variable | Purpose |
|---|---|
DATABASE_URL | Postgres connection string |
BETTER_AUTH_URL / BETTER_AUTH_SECRET | Public URL of the app and auth secret |
OPEN_ASO_ENCRYPTION_KEY | Encrypts workspace credentials at rest (AES-256-GCM) |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | Google sign-in |
OPEN_ASO_ADMIN_EMAILS | Comma-separated platform admins (unlimited plan, /admin) |
OPEN_ASO_SIGNUPS | open (default), invite or closed |
OPEN_ASO_DISABLE_SCHEDULER=1 | Disable the background keyword refresh |
Deploying (Coolify / Docker Compose)
docker-compose.yaml runs the app and Postgres 17 with a persistent volume. On Coolify, create a Docker Compose resource from this repo and set APP_URL (e.g. https://aso.example.com), GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and OPEN_ASO_ADMIN_EMAILS; Postgres credentials, the auth secret and the encryption key are generated by Coolify. Add ${APP_URL}/api/auth/callback/google as an authorized redirect URI in Google Cloud.
Import a legacy single-user SQLite database into a workspace with npx tsx --tsconfig tsconfig.json scripts/import-sqlite.ts --file .data/open-aso.sqlite --email you@example.com.
License
MIT. Not affiliated with Apple or with any commercial ASO product.