@attrkit/mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ATTRKIT_API_KEY | Yes | Your AttriKit API key. Required unless the key is supplied via the macOS Keychain item `attrkit-mcp`, created with `npx -y @attrkit/mcp login`. | |
| ATTRKIT_API_URL | No | Optional AttriKit API base URL. Defaults to https://attrikit.io. Must use HTTPS, except HTTP is allowed only for loopback hosts. Credentials, query strings, and fragments are not allowed. | https://attrikit.io |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | Return the authenticated workspace, plan, app restriction and read/write scopes. |
| get_usage_capA | Return the workspace's monthly qualified-install cap, alert email, current billing period and usage. Requires a workspace-scoped read key. |
| set_usage_capA | Set a monthly qualified-install cap of at least 10,000 and its alert email. Pass null for both values to clear the cap. Requires a workspace-scoped write key. |
| list_appsA | List the iOS and Android apps in your AttriKit workspace (id, name, platform, bundle id, store id, status). |
| create_appA | Create an iOS or Android app without the web UI. Returns the publishable key and a one-time app-scoped management key. |
| get_appB | Return one app's configuration. |
| update_appC | Update app metadata, store destination, timezone or coverage mode. |
| archive_appB | Archive an app and remove it from active customer operations. |
| get_publishable_keyB | Reveal the recoverable SDK publishable key for an app. |
| rotate_publishable_keyA | Issue a new SDK publishable key and return the old-key grace deadline. |
| list_api_keysA | List masked workspace and app management keys. Secret plaintext is never returned. |
| create_api_keyA | Create a read-only or read/write workspace or app key. The secret is returned once. |
| revoke_api_keyB | Immediately revoke a management key by id. |
| list_linksB | List tracking links, optionally for one app. Each link's tracking_url is the campaign link to use in the ad (null if unavailable); url is the store destination. |
| list_campaignsA | List ad campaigns with their honest profit surface. |
| list_adsC | Return ad and ad-set performance, evidence tiers, ROAS, CPA, CPC and modeled remainders. |
| list_recent_eventsB | Return the same recent attribution events and installs visible on the Live dashboard. |
| list_event_deliveriesA | Return one row per delivery of an event to a network connection, newest first: its state (held, queued, sending, retrying, sent, suppressed or failed), the reason with a one-line explanation (for example consent_suppressed, attributed_only_suppressed or destination_event_too_old), attempts, the last HTTP status, and for a held row when it is expected to be released. Use it to answer why an event did not reach Meta, TikTok or Google. Read scope is enough. |
| get_campaign_decisionA | Return AttriKit's profit DECISIONS for your campaigns: the scale/cut/hold call and confidence, computed by the attribution engine. Report the |
| record_campaign_decisionA | Record a scale/cut/hold decision for the reporting period the caller reviewed. AttriKit freezes that period's current campaign range, spend, costs, revenue basis, and model version server-side; callers cannot author receipt provenance. |
| get_attribution_rollupA | Return the account-level attribution overview: installs accounted-for by evidence class (verified / matched / modeled / organic), MER, revenue and data freshness. |
| create_campaign_linkA | 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. |
| update_link_statusA | Change a tracking link between active and disabled, and/or attach the ad network's own campaign id to a link created without one (then pull_network_spend can match its spend). Send status, network_campaign_id, or both. A campaign that already has a different network id is refused with 409 network_campaign_conflict. |
| get_spendA | Return imported ad spend, cost models, completeness and spend freshness. Without from, to or cursor every row comes back at once; with any of them the rows are paged, ordered by network, campaign, ad set, ad and day, and next_cursor is null on the last page. |
| import_spendC | Import campaign or creative-level spend rows. |
| set_cost_modelC | Version commission, payment fees and variable COGS used in profit decisions. |
| pull_network_spendA | Fetch and import creative-level spend from a configured Meta, Google or TikTok connection. AttriKit already pulls every enabled connection every 6 hours, covering today and the 3 days before; call this for an immediate pull or a longer window. Report rows are kept only for campaigns whose network id AttriKit knows (create_campaign_link.network_campaign_id); if none match, the call fails and imports nothing. A network reports rows only for ads that have delivered, so the first useful pull is after the ads start spending. |
| list_integrationsA | List redacted ad-network connections and their readiness. |
| create_integrationA | Store encrypted network credentials and choose, for each of the eight event families (install, session, trial, subscription, purchase, refund, paywall, business), which source's copy AttriKit forwards to the network. AttriKit always does the sending; the owner only picks the copy. attrkit = the events your app reports through the AttriKit SDK (the RevenueCat copy of that family is dropped). revenuecat = the events AttriKit received from your RevenueCat webhook (the SDK copy is dropped); RevenueCat itself sends nothing to the network. customer = events your own servers post to AttriKit. If your app reports subscriptions only through RevenueCat, set trial, subscription, purchase and refund to revenuecat, or none of them reach the network. For Meta and TikTok, delivery_scope and renewal_event are optional; left out, the integration sends every install's events and renewals as Purchase. |
| update_integrationA | Rotate credentials or enable/disable an integration. set_delivery_options changes delivery_scope, renewal_event or both on a Meta or TikTok integration, in any status, without touching its credential or status; give at least one of the two. |
| delete_integrationA | Delete a disabled integration. Enabled integrations must be disabled first. |
| get_revenuecatB | Return redacted RevenueCat status and the AttriKit webhook URL. |
| configure_revenuecatA | Store the RevenueCat provider app id and encrypted authorization secret for an app, and optionally the webhook signing secret (omitted, the stored one is kept). |
| list_webhooksB | List redacted outbound webhook subscriptions. |
| create_webhookB | Create an SSRF-checked webhook subscription. Returns the signing secret once. |
| delete_webhookC | Delete a webhook subscription. |
| export_eventsA | Export one app's events and installs for an inclusive date range. By default (version 1) the answer is the seven-column CSV, event rows capped at the 100,000 most recent INSIDE the range; narrow the range until it is safely below that cap when a complete snapshot is required. Pass version 2 for the wide record export (campaign, ad, evidence and revenue columns), oldest first, as csv or ndjson and paged: each page holds up to |
| send_server_eventA | Report an event for one of your users from your own backend, by the customer_user_id your app passed to AttriKit.setUserID; no device installation id is needed. The event is attached to the install that id resolves to and reaches the destinations whose sender for its family is Your servers. Requires a write-scoped API key. Answers status accepted, duplicate (this event_id was already stored) or suppressed (consent.measurement is not granted, so nothing was collected), with the install_epoch_id it resolved to. 404 customer_user_not_found means no install identified with this id. |
| lookup_customer_attributionA | Look up the attribution of one of your users by the customer_user_id your app passed to AttriKit.setUserID: the campaign, ad set, ad, network, match confidence and attribution_status (attributed, device_matched, organic, pending or consent_required) of the user's newest install. 404 customer_user_not_found means no install identified with this id. Read scope is enough. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
Most tools are clearly separated by resource and action (apps, API keys, integrations, links, spend, events, webhooks), and the descriptions add useful distinguishing detail. A few analytics tools overlap: list_campaigns exposes recommendation/profit fields also surfaced by get_campaign_decision, and list_ads/get_spend both touch performance and spend, so agents may need to read descriptions carefully.
Names are overwhelmingly lowercase snake_case with a verb_noun pattern (list_apps, create_integration, update_link_status), making the set predictable. Exceptions like whoami and minor verb choices such as archive versus delete or get versus lookup are still readable and semantically reasonable.
39 tools is well above the 3-15 well-scoped range and makes this a heavy MCP surface. Although the platform is broad, the tool count likely needs splitting or consolidation into more focused servers.
Coverage spans app lifecycle, API keys, integrations, links, campaigns/decisions, spend, events, webhooks, RevenueCat, and usage caps, so core workflows are mostly complete. Minor gaps remain: no app delete (archive only), no link delete, no webhook update, and no single-resource getters for some resources.