Skip to main content
Glama

Create a campaign tracking link

create_campaign_link

Create a web-to-app tracking link for an ad campaign and return the tracking_url to place in the ad; use the App Store destination URL as the user's final destination.

Instructions

Create a web-to-app tracking link for an ad campaign. Requires a write-scoped API key. Returns the link: tracking_url is the campaign link to use in the ad (for meta the ad's Website URL, for tiktok the ad's destination, for google the tracking template with the App Store URL kept as the final URL); url is only the App Store destination you passed, never the link to put in an ad. tracking_url is null when the server has no link origin configured or the network is unrecognized; then create the link in AttriKit, Links.

Input Schema

NameRequiredDescriptionDefault
app_idYesThe app id the link belongs to.
networkYesThe ad network delivering the campaign.
campaign_idNoOptional EXISTING AttriKit campaign uuid (from list_campaigns) to attach this link to. Not the ad network's id: use network_campaign_id for that. Pass one or the other, not both.
campaign_nameNoOptional human-readable campaign name.
serve_landingNoServe the landing bridge on this link. Defaults to true at the API.
destination_urlYesThe App Store URL to send users to.
idempotency_keyNoStable retry key for this exact mutation.
network_campaign_idNoThe AD NETWORK's own campaign id (for Meta, the campaign ID in Ads Manager, which exists as soon as the campaign is saved, even as a draft). pull_network_spend matches report rows on it, so set it on every link whose spend you will pull: a link created without it can never match. Create the network campaign first, then the link, then paste the link into the ad.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.0.0

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the write/open-world/non-destructive profile, and the description adds real value on top: an auth requirement and a detailed disclosure of the return shape, including exactly when tracking_url is null. It stops short of mentioning rate limits, retry behavior, or that the operation creates a persistent server-side resource, which keeps it from a 5.

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

Conciseness4/5

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

Front-loaded with the purpose in the first sentence, then the auth requirement, then the return semantics. The long parenthetical enumerating meta/tiktok/google placement is dense but earns its space by preventing a common misuse; only the nested clause structure costs it a point.

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?

There is no output schema, and the description compensates fully by explaining both returned fields, their distinction, and the null case. Combined with a fully documented 8-parameter schema, an agent has everything needed to call this correctly and interpret the result.

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%, so baseline would be 3, but the description adds genuine meaning by clarifying that `url` is only the App Store destination the caller passed — pinning down what destination_url actually represents — and by mapping network values to where the tracking_url belongs in each ad platform.

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

Purpose4/5

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

States a specific verb and resource: 'Create a web-to-app tracking link for an ad campaign.' The scope (campaign link, not a general link) is clear enough that an agent can distinguish it from list_links or update_link_status, though no sibling is named explicitly.

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

Usage Guidelines4/5

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

Gives a concrete prerequisite ('Requires a write-scoped API key') and a fallback path when the server cannot produce a link ('then create the link in AttriKit, Links'). It does not state exclusions against siblings such as list_links, but the context for when this tool applies is unambiguous.

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