Affset MCP Server

An MCP server that lets a media buyer run affset from a chat client — pull stats, manage campaigns/zones/team, payouts, targeting, sub labels, and cut underperforming zones in plain language, no…

Local + remotestreamable-httpstdioMIT

What is the Affset MCP Server?

affset-mcp is an MCP project maintained in the affset/mcp repository. The maintainer describes its purpose as “An MCP server that lets a media buyer run affset from a chat client — pull stats, manage campaigns/zones/team, payouts, targeting, sub labels, and cut…”. Read the project documentation for the complete scope.

Installation

The documented npm package is @affset/mcp. The configuration below comes from the maintainer’s example; adapt its paths and account values to your environment.

Configuration values

The example declares AFFSET_BASE_URL, AFFSET_API_KEY, AFFSET_NAMESPACE. Secret-looking values have been replaced with placeholders. Required and optional labels are shown only when the documentation states them.

Source

Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
whoamiShow the tenant this server is bound to: namespace, API base, derived dashboard URL, and (when readable) company / timezone / custom API domain. Read-only.
get_statsTraffic stats grouped by a dimension (date, campaign, zone, country, sub1–5, advertiser, publisher, …), optionally narrowed with…
list_campaignsList campaigns (status / name filter, pagination).
get_campaignOne campaign's full record — every field (untruncated offer URL, exact schedule, budgets/pacing, silent flag, payout goal type) plus its targeting rules and…
list_zonesList traffic-source zones (status / name filter, pagination, linked source).
list_teamList team members (email, role, manager). Never returns API tokens.
create_team_memberInvite a team member (owner, manager, publisher, advertiser, publisher_manager, advertiser_manager). A scoped manager key can only create its own managed role,
create_campaignCreate a campaign from an advertiser email, offer URL, geo, payout and name. Defaults: CPA / rate 0, paused, global payout rule, and a ready tracking link…
set_campaign_statusRun or pause a campaign (action: "run" \
update_campaignPartial update (name, offer URL, status, rate, budgets, dates, …). Dry-run by default; confirm: true to apply. Prefer set_campaign_status for run/pause.
create_zoneCreate a traffic-source zone (name + optional postback/site/traffic-back URLs, optional traffic_source_id link). Always created active. Dry-run by default…
update_zonePartial update (name, status, URLs, traffic_source_id). Dry-run by default; confirm: true to apply. Pass null to clear a URL or unlink the source.
list_traffic_sourcesList traffic sources — the networks bought from, each with the tracking/postback templates its linked zones use. API token shown only as set/none.
create_traffic_sourceCreate a traffic source, optionally from a network preset (exoclick, trafficstars, propellerads, adsterra, richads) that copies verified templates into an…
update_traffic_sourcePartial update (name, templates, api_token, status). Linked zones pick the new tracking template up immediately. Dry-run by default; confirm: true to apply.
list_source_bidsThe network campaigns of one traffic source with their current bids, read live from the network account (ExoClick, TrafficStars, RichAds — needs the source's…
set_source_bidSet one network campaign's bid in USD using its existing pricing model (for RichAds: CPM for pops, CPC for push/display). The dry run returns…
get_zone_urlThe /serve URL to paste into a network's campaign settings — rotates across the zone's active campaigns. A zone linked to a traffic source renders that…
get_tracking_linkThe /track/click link for an existing campaign + zone — straight to one active campaign, with no rotation or targeting checks. Renders a linked source's…
cut_zonesBlacklist underperforming zones on a campaign by threshold (CR / spend / ROI). Dry-run by default; confirm: true to apply.
list_payout_rulesList a campaign's global + per-zone payout rules and its payout_goal_type.
set_payout_ruleUpsert a global or zone-specific payout. Dry-run by default; confirm: true to apply.
delete_payout_ruleDelete a global or zone-specific payout rule. Dry-run by default; confirm: true to apply.
set_payout_goalSet or clear payout_goal_type (goal-based conversions). Dry-run by default; confirm: true to apply.
list_targeting_typesCatalog of targeting rule types, flagging the seeded ones /serve never evaluates.
list_targeting_rulesList a campaign's targeting rules, flagging any that have no effect.
set_targeting_ruleUpsert one targeting rule (safe merge), normalised to what /serve matches. Dry-run by default; confirm: true to apply.
remove_targeting_ruleRemove one targeting rule by id or type+method. Dry-run by default; confirm: true to apply.
list_sub_labelsList tenant display names for sub1–sub5.
set_sub_labelsSet or clear sub labels (partial; null clears). Dry-run by default; confirm: true to apply.
list_conversionsList conversion audit records (payout, spend, pixel type, payload, postback). paid_only filters server-side; other optional filters are client-side on the…

How to install the Affset MCP Server

{
  "mcpServers": {
    "affset": {
      "command": "npx",
      "args": [
        "-y",
        "@affset/mcp"
      ],
      "env": {
        "AFFSET_BASE_URL": "https://api.affset.com",
        "AFFSET_API_KEY": "YOUR_AFFSET_API_KEY",
        "AFFSET_NAMESPACE": "your-namespace"
      }
    }
  }
}

From the project documentation. Replace placeholders and example paths before connecting.

Configuration

VariableDescriptionRequired
AFFSET_BASE_URLDeclared in the maintainer’s client configuration.Check documentation
AFFSET_API_KEYDeclared in the maintainer’s client configuration.Check documentation
AFFSET_NAMESPACEDeclared in the maintainer’s client configuration.Check documentation