MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Data access / search

Apptiller

Grow App Store apps: ranks, listing, ads, revenue and AI answers. Sign in to read your own apps.

Checks passed
14 / 22

1 failed · 7 not measured

Median response
1652 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
50

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
103
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
310
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 1359 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name Apptiller.

  • Pass
    Lists tools

    tools/list returned 50 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 1652 ms over 2 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 1916 ms over 2 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    2 of 2 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Pass
    Stable tool list

    No tool was removed and no required parameter was added in the last 30 days.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    63 of 128 parameters have a description (49%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-09T19:39:03.584644Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using Apptiller

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http apptiller https://mcp.apptiller.com/mcp

Capabilities

Tools 50

ai_referrals

Whether the app's website script is installed (status), and what it counted from AI assistants over the last days (UTC): visits per assistant, clicks to the App Store or Google Play after one, purchases the site reported, by day, and the pages people landed on. Google AI Mode and AI Overviews refer from google.com and aren't counted here.

Discovered
ai_referrals_setup

Turns on counting of the people ChatGPT, Perplexity, Gemini, Copilot, Claude and other assistants send to an app's own website, and their clicks to the App Store or Google Play (tagged with an App Store campaign token per assistant) or a purchase the site reports. Returns the script tag to add to the site; calling it again keeps the same key. Domains default to the ones AI-answer tracking knows, else the project's website. Counts only, no cookies.

Discovered
ai_visibility_collect

Fetches every queued answer that is ready and scores it. Runs by itself every hour; running it fetches fresh answers sooner.

Discovered
ai_visibility_plan

The organization's AI-visibility allowance: how many products and questions it covers and how many runs a day, and what is used. Without one, tracking can be set up but the daily answers don't run.

Discovered
ai_visibility_report

How often ChatGPT, Google AI Mode and AI Overviews named the app for its questions, with a 95% range, its average position when named, which apps they named instead, and which sites they cited (including whether the app's own site or store listing was cited).

Discovered
ai_visibility_run_now

Queues one extra round of a project's questions on its engines now, instead of waiting for the daily run (up to 150 questions × engines). Answers arrive within about an hour.

Discovered
ai_visibility_set_questions

Adds the questions people would ask an assistant when looking for an app like this one, e.g. "best app to track PCOS symptoms". They work best in a buyer's own words, mostly without the app's name. With replace, questions not in the list stop being asked (their history is kept).

Discovered
ai_visibility_track

Starts (or updates) tracking whether ChatGPT, Google AI Mode and Google AI Overviews recommend an app. Creates the project if it does not exist. Give every name the app goes by, its own domains, its App Store id or Play package, and the competitors to compare against.

Discovered
ai_visibility_tracked

Lists the apps tracked in AI answers, what Apptiller looks for in each, and their active questions.

Discovered
app_brief

What Apptiller's agent works from for one app: the brief the user set (the goal, such as a target cost per paying subscriber or a ROAS, core countries, competitors, constraints such as "don't touch brand campaigns", and short facts), the limits it works inside (mode: watch only reports, ask proposes and waits for approval; the biggest step one change may take; the most a day's budget may grow; which levers it may use; campaigns it must never touch), its open plan items with their check dates, its last 14 journal entries and what past changes taught it on this app. Read-only.

Discovered
app_map_sources

Creates an app (with create) and maps connected accounts to it: Meta and Apple Ads ad accounts (spend), AdServices, AppsFlyer and Adjust apps (attribution), RevenueCat projects (revenue). Name an account by source_id or provider:external_id as this account lists them (e.g. meta:act_123, revenuecat:proj1a2b, adservices:com.example.app). For an ad account shared by several apps, set campaign_name_prefix so only that app's campaigns count. remove unmaps; history stays. Also looks the app up on the App Store (name, icon, developer) from its App Store id, bundle id, or a mapped AdServices or AppsFlyer app.

Discovered
app_ownership

Whether the app is proven to be this organization's, and by what: a connected App Store Connect key that sees the app, or a verified domain that the app's App Store listing (developer website) points to. When it isn't, says what would prove it.

Discovered
app_performance

One app's spend, installs, trials, revenue, ROAS and cost per install, per day and per network (with an 'all' total per day) or per campaign, joined from Apptiller's synced history. Every number names its source: spend from the ad platforms; installs from the attribution layer (Apptiller's AdServices lookup for Apple Ads, the MMP for other networks), falling back to what the network claims, then to the revenue tool's tags; revenue, and so ROAS, from the MMP from the first day it has revenue for the app (revenue from the installs it attributed, USD, by install day; zeros mean the network earned nothing), else from the revenue tool's acquisition tags, whose split then sits in revenue_elsewhere; new customers and trials from the revenue tool, whose customers with no acquisition tag form an 'untagged' row (unknown source, not organic). Apple's own counts from App Store Connect sit beside each day's total in the network breakdown: first-time downloads in installs_elsewhere and proceeds (after Apple's commission, net of refunds) in revenue_elsewhere, standing in only on days no other layer counts; appleads rows carry app_store_search, Apple's count of all App Store search downloads, organic and Apple Ads together. Meta web campaigns (aimed at leads, sales or traffic, not app installs) carry web_results: the sign-ups, purchases and purchase value Meta's pixel counted on the website, Meta's own claim; they have no installs, the MMP doesn't judge them, and Meta's purchase value is their revenue only where the revenue tool has none tagged to them. ROAS only where spend and revenue share a currency. Set per_day false for one row per network or campaign over the whole range.

Discovered
app_store_funnel

Apple's App Analytics for each app, from App Store Connect's analytics reports, organic and paid alike: App Store impressions and page views, first-time downloads and redownloads, the conversion rate, purchases with proceeds in USD, subscription events (trial and paid offer starts, conversions to paid, paid starts, renewals, voluntary and involuntary churn, refunds) and active subscriptions (trials, paid offers, paid plans, billing issues), per app by day, by where people found the app (App Store search, which includes Apple Ads, App Store browse, App referrer, Web referrer) or by country. Days are UTC; the last two or three are incomplete. Apple makes these reports only after an Admin asks once, which Apptiller asks nobody to do, so only apps whose reports someone started (for another tool) have them. Says nothing about which campaign brought a download.

Discovered
app_store_listing

An app's App Store listing (name, icon, developer, version, genre, price, rating) and every change Apptiller has seen to it: name, icon, description, screenshots, version and release notes, price. Checked daily; set refresh to look it up now. Uses Apple's public lookup, so it needs only the App Store id or bundle id, no App Store Connect access.

Discovered
app_store_sales

Apple's own daily App Store numbers from App Store Connect (Sales and Trends), organic and paid alike: first-time downloads, re-downloads, updates, in-app purchases, new and renewed subscriptions, refunds and the developer's proceeds (after Apple's commission and taxes, net of refunds, in the currency Apple pays for each storefront), per app by day, storefront country or product. Days are Pacific Time, Apple's report day; each day comes out the next morning and is synced within six hours. Says nothing about which ad brought a download.

Discovered
apple_ads_accounts

Lists the Apple Ads ad accounts Apptiller can read, with the connected user's roles in each, straight from Apple. Accounts marked basic are Apple Ads Basic: Apple offers no reporting API for them, so there is no spend data and their results come through attribution.

Discovered
apple_ads_performance

Daily Apple Ads (App Store search ads) numbers from Apptiller's synced history: spend, impressions, taps, installs and every other metric Apple reports, by campaign, ad group, ad or keyword, between two dates. Synced four times a day; set raw to get Apple's full rows.

Discovered
apply_proposal

Makes the change a proposal the user has seen and approved describes, in the live ad account: pauses the campaign, ad group or keyword, or moves its bid or daily budget by the proposed step (at most 20%). Apple Ads, Meta and Google Ads (Meta and Google Ads move budgets and pause; they have no bids to move). Apptiller first reads the entity live from the platform and writes only if it still has the value the proposal started from; the value it replaces is kept, so the change can be undone. A proposal waits while an earlier change to the same entity, one above it or one inside it is still being measured (7 days), so what each change did can be told apart. This spends or saves real money.

Discovered
apps

Lists the apps in this Apptiller account with the ad accounts, attribution sources and revenue projects mapped to each (and which layer each one feeds), plus the connected accounts no app uses yet. Per-app performance covers mapped accounts only.

Discovered
attribution_performance

Daily installs by attribution source from Apptiller's attribution layer (Apptiller's own Apple AdServices lookup, AppsFlyer and Adjust when connected: their rows carry every metric the MMP reports in metrics, including sessions, revenue, cost and in-app events; Adjust also has ad group rows), by network, campaign, ad group, keyword or ad, between two dates, with claim type, conversion type and country counts. These are installs as the attribution source saw them, not what the ad network claims or what the revenue tool tagged.

Discovered
attribution_setup

An optional fallback for an app with no MMP (AppsFlyer, Adjust…) and no revenue SDK that collects Apple Ads attribution; Apptiller otherwise reads attribution from the tools already connected. Creates this organization's Apptiller ingest key and returns a Swift function to add to the iOS app. The app then sends each install's Apple AdServices token to Apptiller, which resolves it with Apple: which Apple Ads campaign, ad group, keyword and ad brought the install, for Advanced and Basic accounts alike, with no third-party SDK and no tracking prompt. Calling it again replaces the key; apps with the old key stop counting until updated.

Discovered
briefing

What Apptiller's analyst found in each app's last 14 days of synced data: Meta campaigns and ad sets, and Apple Ads campaigns, ad groups and keywords, that spent with no results, cost far more per result than the rest of their channel, or far less. Each finding has its evidence (spend, results and their source, cost per result with a 90% range, the baseline it was compared with), how sure it is, and one proposed change (pause, bid or budget). Like is compared with like: one channel, level, objective and currency, measured in the deepest result the group has enough of (purchases, trials, sign-ups, attributed installs, then installs the network claims), from one source. Also, per group, what it was judged by or why it couldn't be, and the changes Apptiller made in the app's ad accounts over the last 30 days (with change ids), each with its effect: the 7 days before it against the 7 after, in the result and source its finding was judged by, net of how the rest of its group moved over the same days, with how sure that is and a verdict (better, worse or unclear: cheaper results after a cut, more of them after a raise). An Apple Ads change also gets `search` once the app's App Store Connect analytics are connected (search results campaigns only): all of App Store search's first-time downloads a day before and after (Apple's App Analytics, organic included), the part Apple Ads credits its search results campaigns with, and the share of Apple Ads' move that was new to search, with a 90% range set by how much organic search moved week to week before (verdict incremental, organic or unclear, once Apple's numbers for all 7 days after are in); the analyst doesn't raise again what a raise mostly took from organic search. While a change is being measured, the analyst leaves alone the entity, those above it and those inside it; their proposals wait (status 'waiting', and `waiting` says for which change and until when). After that it judges them on the days since the change only, and if the finding still holds proposes the next step, saying what the last one did. The analysis runs daily at 12:40 UTC; set refresh to run it now. Nothing in an ad account changes from this tool: a proposal changes something only once the user approves it and it is applied.

Discovered
check_launch

Works out a launch's tier again from what is connected now (after connecting RevenueCat, mapping its project to the app, or proving ownership).

Discovered
close_site_guide

Marks one guide as published, with the full https address where it went live, so Apptiller counts its Google clicks from then on; or dismissed.

Discovered
connect_account

Returns a one-time link (valid 15 minutes) that the user opens in a browser to connect a service to Apptiller. The user enters any keys or passwords on that page, not in the chat.

Discovered
data_coverage

Per app and ad channel (Apple Ads, Meta, …), over the last 30 days of synced data: what Apptiller can judge the channel's campaigns by (paying subscribers, the MMP's purchase or trial event counts, Meta's own conversion counts, installs, or only the network's own claims), the source that rests on, and what is missing, with how to fix it in tools the user already has. Also each connected account's facts in its layer (installs, MMP revenue and purchase events, customers and tags, spend). Reads synced data only; asks nothing of the app.

Discovered
dismiss_finding

Dismisses one of the analyst's findings: it leaves the briefing, its pending proposal is rejected, and the analyst stays quiet about the same thing for 30 days. Nothing changes in the ad account, and changes already made stay.

Discovered
edit_launch

Changes what the board shows of a launch: its name, tagline, category, and whether dollar amounts are hidden (rank and growth still show). Fields left out stay as they are. The address (slug) never changes.

Discovered
launch_ai_answers

A launch's free AI answers: up to 5 questions someone who needs the product would ask (never naming it), asked on ChatGPT, Google AI Mode and AI Overviews. Pass questions to replace them; run: true starts the first check, once per launch (each question 3 times on every engine), asked as from country (US unless given). Founding launches are then asked again every day until their period ends. Returns the questions and the results so far: how often the product is named and who is named instead, per question. With raw: true it also returns the latest day's answers themselves: each engine's text (up to 1500 characters), whether and where it named the product, who else it named, and the pages it cited. Answers arrive within a few hours.

Discovered
launch_product

Launches an app (from its App Store link or id) or a website (its domain, plus a name) on Apptiller Launches, the public board ranked by the revenue a launch adds in its period, verified through the product's own RevenueCat app or its Stripe account and a TXT-verified domain (websites). It goes into the first open period with a spot (the founding month first). Returns the launch with its tier: verified (ranked), owner (ownership proven: listed, not ranked) or unverified, and what would raise it. One launch per product across Apptiller. Launching is free; it makes the product's name, tagline and launch-period numbers public.

Discovered
list_connections

Shows which services (Meta Ads, App Store Connect, Apple Ads, Google Ads, RevenueCat, AppsFlyer, Adjust) are connected to this Apptiller account.

Discovered
list_domains

The organization's domains with their state (pending, verified, lapsed, failed) and the TXT record each one needs. Removing a domain is done in the web app.

Discovered
list_launches

This organization's launches on Apptiller Launches: period, tier, proof, what would raise the tier, the latest numbers (revenue added in the period so far, growth, new customers, trials), and the public page's traffic over the last 7 days (views by where they came from, clicks out to the product, badge loads on other sites). For an app, app_store_from_launches: the App Store page views and first-time downloads Apple's App Analytics credits to apptiller.com (Web referrer) since the launch was made (since, a UTC day as App Analytics counts them), through latest, the last day Apple's reports reached. latest null: Apple's Detailed reports haven't both come in (started false: App Analytics not started; started true: still coming in). latest before since: Apple hasn't reported the launch's days yet, so the zeros aren't counts. stopped: every App Store Connect key that reads the app is revoked or broken, so latest won't move until it's replaced. Apple leaves small counts out. Each has its page in the web app. Withdrawing is done in the web app.

Discovered
meta_ad_accounts

Lists the Meta ad accounts Apptiller can read, with currency and status.

Discovered
meta_diagnose

Shows what the connected Meta token is (system user or person), its permissions and granted account ids, and what each ad-account lookup returns. Never shows the token.

Discovered
meta_performance

Spend, impressions, reach, clicks, CPM, CTR and key results (purchases, trials, registrations, leads, installs, checkouts…) with cost per result and ROAS, for a Meta ad account by account, campaign, ad set or ad. Use a date preset such as last_7d, or since/until dates. Set raw to get Meta's full action list.

Discovered
reject_proposal

Marks one of the analyst's proposals as rejected. Nothing changes in the ad account; the finding stays in the briefing, and the analyst doesn't propose that change again while the finding stays open.

Discovered
revenuecat_chart

A RevenueCat chart over time: trials, trial conversion, MRR, revenue, churn, actives, retention, refunds, paywall conversion and more, optionally segmented (e.g. by country or product) and filtered.

Discovered
revenuecat_chart_options

The resolutions, segments (country, product, store…), filters and selectors a RevenueCat chart accepts.

Discovered
revenuecat_overview

Current subscription metrics for a RevenueCat project: active trials, active subscriptions, MRR, revenue and new customers over the last 28 days, and active users.

Discovered
revenuecat_projects

Lists the RevenueCat projects Apptiller can read, with their ids.

Discovered
revenuecat_revenue

Total revenue for a RevenueCat project between two dates (inclusive): gross, net of taxes, or proceeds after store fees.

Discovered
set_app_brief

Writes the brief Apptiller's agent works from for one app. Fields left out stay as they are. goal: what a good result is, as a cost per paying subscriber, per trial or per install (with its currency) or a ROAS (revenue over spend, e.g. 1.2), or null to clear it. countries: the markets that matter most, as two-letter codes. competitors: apps the user names as competitors (names or App Store ids). constraints: plain words the agent must respect, such as a launch date or campaigns not to touch. facts: short facts by key (prices, seasonality, anything the agent should know); a null value removes one. The agent never overwrites what the user set here. These come from the user.

Discovered
set_app_limits

Sets, for one app, how far Apptiller's agent may go. Owners and admins only. Fields left out stay as they are. mode: watch (the agent only reports), ask (it proposes changes and a member approves each one; the default) or autopilot. autopilot: it applies its own proposals inside these limits by itself, two changes a day at most (where the account's plan includes it; needs a linked ad account that is being read, an attribution source, and max_daily_increase unless the budget lever is off). max_step_pct: the biggest step one change may take, 1 to 50 percent of the current bid or budget (default 20). max_daily_increase: the most one change may add to a day's budget, in the ad account's currency (null: only the percentage applies). levers: which kinds of change the agent may propose (pause, budget, bid). protected_entities: campaign, ad set or keyword ids it must never propose to change. These limits also hold when a member applies a change, from here or the dashboard: one outside them is refused.

Discovered
set_site_guides

Turns daily guides on or off for one app's website. On needs the website verified, in a connected Google Search Console, and a plan that includes them; the error says which is missing. Each morning after that, Apptiller writes at most one guide, only when a search is worth one, and pauses while 3 wait unpublished.

Discovered
setup_suggestions

What this Apptiller account is still missing (connections to add or repair, settings in tools already used), each with why it helps and how to do it. Steps marked optional need a change in the user's app.

Discovered
site_guides

Daily guides for one app's website: whether they're on and what's missing to turn them on (a verified website in a connected Search Console, and a plan that includes them), and its guides, newest first. Each guide answers one Google search that shows the site but is rarely clicked: the search and its numbers, the need behind it, the title, address slug, meta description, the guide in Markdown with its two calls to action, the sentences to add on the site's own pages to link to it, and every claim the check read with what backs it (status held: something couldn't be backed; fix it before publishing). agent_spec is the whole job for a coding agent: where the page goes, its head tags and structured data, the links to add, the checks. Published guides carry their Google clicks and impressions since. Apptiller never publishes them.

Discovered
undo_change

Puts back, at the user's request, the value an ad account had before Apptiller changed it. Only while the campaign, ad group or keyword still has the value Apptiller wrote: if it was changed since, nothing is written. It changes the live ad account.

Discovered
verify_domain

Starts proving the organization owns a domain, or checks it again: returns the TXT record to add at the domain's DNS provider (host and value), and whether Apptiller finds it now. Apptiller also looks for it every hour for 72 hours. Calling it again for the same domain keeps the same record. A verified domain proves an app is the organization's when the app's App Store listing points to it.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected1359 ms50
Connected1945 ms50