Skip to main content
Glama

AppTail – ASO & Keyword Research

Add Keywords

add_keywords

Start tracking search terms for one of your apps, in one storefront. Send terms, or keyword_ids for suggestions returned by discover_keywords — a suggestion MUST be added by id, because re-resolving its term can land on a different keyword row. Counts against the plan's per-app keyword limit; dry_run reports what would happen without writing anything. Terms already in the corpus come back under already_tracked rather than as an error — that is the state the caller asked for.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
app_idYesApptail app id for one of YOUR apps — get it from get_account. Not the numeric id in an App Store URL (that is apple_app_id). Keywords are tracked per app.
countryYesStorefront to track these terms in, ISO 3166-1 alpha-2 (e.g. US, GB, DE). Required and not defaulted: a term tracked in the wrong storefront is a wasted keyword slot. Ranks are per storefront — the same term ranks differently in each.
dry_runNoReport what would be added, and how many slots are left, without tracking anything. Nothing is written and nothing counts against the plan.
keywordsNoSearch terms to start tracking, as a user would type them into the App Store (e.g. ["fitness tracker", "workout app"]). Send the whole batch in one call rather than one term per call. Terms we have never seen are created. Every added term whose results are more than a day old is crawled straight away, and positions usually land within a few minutes: a get_keywords read made immediately after this call shows those terms as unmeasured, which means not crawled yet and not that the app is missing from the results. Either this or `keyword_ids` is required.
keyword_idsNoApptail keyword ids to start tracking — the `keyword_id` on a discover_keywords row. Use this rather than the term whenever you have an id: a term is re-resolved and can land on a different keyword row than the one you were shown.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
addedYesTerms now being tracked. Under `dry_run` this is what would be added and nothing was written.
limitYesKeywords this plan allows per app. -1 means unlimited.
app_idYesThe app these terms are tracked for.
countryYesThe storefront they were tracked in.
dry_runYesTrue when nothing was written.
skippedYesEverything not added: the union of `already_tracked` and the terms that could not be resolved in that storefront or that ran out of plan room. Do not report this count as a failure without reading `already_tracked` first.
remainingNoKeyword slots left for this app on this plan after the call. Null when the plan is unlimited. Zero means the next add is refused.
added_countYesSize of `added`.
limit_reachedNoSet when the account's plan limit stopped the run before the whole list was added. A ceiling, not a fault — say what was capped rather than retrying.
skipped_countYesSize of `skipped`, both reasons together. Subtract `already_tracked` before calling anything a problem.
already_trackedYesThe subset of `skipped` that the app was already tracking. **This is the end state that was asked for, not a fault** — a term already in the corpus needs no retry and no apology. What is in `skipped` but not here is the half worth mentioning: a term that does not exist in that storefront, or one the plan had no room for (see `limit_reached`).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say it is a non-destructive write in an open world; the description goes much further by disclosing plan-limit consumption, the no-write guarantee of dry_run, the idempotent 'already_tracked' outcome, and the immediate-crawl/unmeasured read-after-write behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, and the remaining sentences each carry a distinct operational fact (id requirement, quota, dry_run, already_tracked). No filler despite the density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter mutation with an output schema already handling return shape, the description covers everything an agent needs: quota implications, batching guidance, id ambiguity, dry-run semantics, and the non-error duplicate case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and its field descriptions are already detailed, so baseline is 3. The description still adds cross-cutting semantics the schema cannot: that a re-resolved term can land on a different keyword row, justifying the id-vs-term choice, though it adds little on app_id/country/dry_run.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: 'Start tracking search terms for one of your apps, in one storefront.' It is immediately distinguishable from siblings like discover_keywords (suggestion source) and remove_keywords (inverse operation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules: send terms OR keyword_ids from discover_keywords, with the hard condition that a suggestion MUST be added by id. Also flags the plan limit, the dry_run escape hatch, and that already-tracked terms are not an error.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources