Affiliatemcp agent

Affiliate network MCPs and skills

by bobberrisford·MIT license·★ 7 Stars on the repo·GitHub ↗

Files of Affiliatemcp

bobberrisford/main1 file
README.md
Show the full text800 lines

affiliate-mcp

Integrate your affiliate networks with Claude or Codex.

npm version networks adapters maintained by

Network operators: most adapters are community-built and experimental. Adoption gives your team ownership and a verification path; promotion to partial or production still requires current evidence and maintainer review. Find your network's issue under the adopt-this-network label.

Affiliate networks have two sides — and neither has a first-class AI workspace integration.

Publishers earn commissions from the programmes they join. Brands (and the agencies who manage them) run those programmes and pay the commissions out. I wanted to chat to my own affiliate data in the AI workspace I already use; none of the networks had shipped an integration for either side, so I built a broad beta set that covers both publisher and advertiser-side work.

If you're a publisher, you can ask:

"What did I earn across all networks last month?"

"Which programmes have transactions still pending after 90 days?"

"Compare my earnings month on month."

If you're on the brand side — running a programme, or an agency managing several — you can ask:

"How is Acme's programme doing this quarter?"

"Show me revenue across all my clients this week."

"Any anomalies in the affiliate data?"

Your AI workspace figures out which networks to call, fetches the data live from their APIs, and gives you the answer. You can use Claude or Codex to turn it into a sheet, an artifact, an email to your boss, whatever you want.

Free and open source. MIT licensed. Bring your own keys. For the product philosophy, read the AI-native affiliate data manifesto.

Who this is for

This tool serves two audiences. Pick the one that fits — or both, if you wear both hats.

You're a publisher. You earn commissions from affiliate programmes, your dashboards can't keep up with how fast you can think, and you want one conversation that spans every network you're on.

You're on the brand side. You run an affiliate programme — or you're an agency managing several brands' programmes. You want one question that fans out across networks and brands, and surfaces what the dashboards bury: publishers trending down, reversal spikes, dead links, programmes drifting toward zero.

Either way, you do not need to know what an API is or write code. The non-technical Claude Desktop track needs:

  • Your existing logins to the affiliate networks you already work with.
  • Claude Desktop installed.

The technical track uses a terminal, Node.js 20 or newer, and Claude Desktop, Claude Code, Codex, or another compatible local stdio MCP client; check the support states below before relying on an untested client journey.

And if you work for an affiliate network, this is also for you. The bundled adapters are placeholders until each network adopts its own. See CONTRIBUTING.md under "Adopting your network".

Why bother?

One question, every network and every brand. "Show me earnings by programme" hits your configured publisher networks in parallel. On the brand side, "show me revenue across all my clients this week" fans out across every brand and network pair you've registered.

Plain English, not filters. No more clicking through date pickers and saved views. "Last quarter, status pending, sorted by amount" is the whole prompt.

Your data, your machine, by default. It runs locally. Your keys live in ~/.affiliate-mcp/.env, locked to your user account. Optional anonymous usage telemetry is off by default and never contains affiliate data, credentials, prompts, arguments, results, or error text. The networks see the same API calls they'd see from their dashboard.

Catches what dashboards bury. Stale transactions, inactive programmes, dead deeplinks and week-on-week drops are surfaced by the packaged skills.

Optional local result cache. Persistent caching is off by default. Set AFFILIATE_MCP_CACHE=on in ~/.affiliate-mcp/.env to cache selected programme inventory and closed reporting windows locally with owner-only permissions. Open and current windows always go live. On a shared machine where you cannot rely on file permissions, leave caching off. Run affiliate-networks-mcp cache clear to remove cached results; see PRIVACY.md for the storage and retention contract.

Getting started

Choose one of two primary tracks. Both run the same local MCP server and keep your credentials on your machine.

Track 1: non-technical, Claude Desktop

Use the host-native Claude Desktop .mcpb. No Terminal, Node.js, or manual configuration is required.

  1. Download affiliate-networks-mcp-<version>.mcpb from the latest GitHub release.
  2. In Claude Desktop, open Settings → Extensions → Advanced settings → Install Extension… and select the downloaded file.
  3. Add credentials for the networks you use, then ask Claude "What affiliate networks do you have access to?"

The extension does not update itself: download the latest .mcpb and install it over the top; saved credentials are kept (full steps for every install path). The native extension currently offers secure setup fields for Awin, CJ, Impact, and Partnerize. It runs the complete server, so an existing ~/.affiliate-mcp/.env continues to enable every other adapter. A portable browser setup flow for the remaining networks is planned; until then, use the technical track below when adding them.

The standalone Electron/DMG setup app is a fixes-only compatibility fallback for existing macOS users. It is not a third primary onboarding track. See desktop/README.md for its remaining use case.

Track 2: technical and semi-technical, CLI plus local stdio

You'll need Node.js 20 or newer installed. If you don't have it, use the Node.js download page.

1. Run the setup wizard. Open Terminal (macOS) or PowerShell (Windows):

npx affiliate-networks-mcp setup

It walks you through one network at a time, asks which side you want, shows where to find each credential, then checks it against the live network.

For brand-side networks, the wizard asks which brands those credentials can reach, then lets you pick local nicknames. The mapping is saved to ~/.affiliate-mcp/brands.json, see Managing brands.

2. Check everything is wired up.

npx affiliate-networks-mcp test

You should see one line per network: ok for everything that's healthy, error — <reason> for anything that isn't.

3. Connect it to your local MCP client. Use a host-native package, the CLI installer, or local stdio configuration. The setup wizard offers the shipped CLI installer targets at the end automatically.

Claude Desktop (Mac/Windows app):

npx affiliate-networks-mcp install

Finds your Claude Desktop config, adds the affiliate entry alongside anything else you already have, takes a timestamped backup first. Restart Claude Desktop after it finishes. Flags: --desktop / --code / --codex to pick one, --all to include Codex and skip prompting, --dry-run to preview, --force-overwrite if your existing config is malformed JSON.

Claude Code (terminal):

claude plugin marketplace add bobberrisford/affiliatemcp
claude plugin install affiliate-networks-mcp@affiliatemcp

Registers the MCP server and bundled skills in one step. (Or use the install command above — it detects Claude Code too.) Already inside a Claude Code session? Just ask it to install the affiliate-mcp plugin and it runs these commands for you; no terminal juggling needed.

Codex (OpenAI, terminal or IDE extension):

npx affiliate-networks-mcp install --codex

This adds the local stdio MCP server to ~/.codex/config.toml; the same MCP config is used by the Codex CLI and Codex IDE extension. Manual setup:

codex mcp add affiliate -- npx -y affiliate-networks-mcp

Verify: open Codex, run /mcp, then ask "What affiliate networks do you have access to?" This is OpenAI/Codex support, not ChatGPT connector support. ChatGPT requires a reachable HTTPS MCP server and is scoped separately.

Claude Cowork desktop (org accounts):

Cowork syncs plugins from a GitHub repo, but blocks public repos from org marketplaces — so you need a private mirror first. The setup wizard offers this at the end, or run install and pick Cowork:

npx affiliate-networks-mcp install      # detects your clients, offers Cowork

(Or go straight to it: npx affiliate-networks-mcp cowork-mirror.)

It creates <you>/affiliatemcp-internal as a private repo and mirrors the upstream into it. If you have the GitHub CLI (gh) signed in, it's used automatically; otherwise it tells you exactly where to get a GitHub token and prompts you to paste it — the same "paste a credential" flow as setting up a network. Re-run with --sync to refresh against new releases.

Then, with org-admin access, in Cowork: Organization settings → Plugins → Add plugin → GitHub → enter <you>/affiliatemcp-internal → install affiliate-networks-mcp from the synced marketplace.

Prefer to edit Claude Desktop config by hand?

Open the Claude Desktop config file at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the affiliate entry inside mcpServers — keep any siblings:

{
  "mcpServers": {
    "affiliate": {
      "command": "npx",
      "args": ["affiliate-networks-mcp"]
    }
  }
}

Restart Claude Desktop after saving.

For another local stdio MCP client, configure the server command npx -y affiliate-networks-mcp. These clients are compatible in principle, not yet tested first-party journeys. Draft PR #49 is the existing VS Code/Copilot installer candidate.

Client support states

These labels describe the onboarding journey, not whether every network adapter is live-verified. "Tested" means repository-owned automated validation, not live proof against every host version. See REPORT.md for maturity.

Client or path Support state What that means
Claude Desktop .mcpb Shipped and release-tested Primary non-technical path. CI builds and smoke-tests the bundle. Secure setup fields currently cover Awin, CJ, Impact, and Partnerize.
Claude Desktop CLI/manual config Shipped and tested Technical local stdio path. Installer/config behaviour has automated coverage.
Claude Code plugin and CLI registration Shipped and tested Technical path with packaged skills and local MCP registration.
Codex CLI and IDE extension Shipped and tested Technical path using the shared local Codex MCP configuration. This is not ChatGPT connector support.
Hosted connector (mcp.agenticaffiliate.ai) Shipped and tested, paid Remote MCP over OAuth, for people who cannot run the local server. Any client that can add a custom connector can use it, including Claude. Covers four networks (Awin, CJ, Impact, Rakuten), not every adapter. Read-only; credentials sit in an encrypted vault and browser-driven operations stay local-only. See PRIVACY.md and the security page.
Claude Cowork private mirror Partially shipped Requires a private mirror and org-admin follow-through; it is not a simple individual setup path.
Cursor, VS Code, and generic local MCP clients Possible, not yet a tested first-party journey The local stdio server is compatible in principle. Client-specific setup, packaging, and support ownership are tracked in #207.
Portable browser credential setup Planned, not shipped Intended to make all network credentials available without a terminal. Its security and DMG-retirement decision is tracked in #206.
ChatGPT Possible through the hosted connector, not yet a tested first-party journey ChatGPT cannot use this local stdio server directly, so it needs the hosted connector above; the free local path is not available to it. No tested ChatGPT setup walkthrough and no connector-directory listing yet.

Check it worked. In a new Claude conversation, ask "What affiliate networks do you have access to?" — you should see every network you configured. If you registered any brands, also try "list my brands".

To disconnect later: npx affiliate-networks-mcp uninstall, or claude plugin uninstall affiliate-networks-mcp for the plugin path.

Anonymous telemetry

The project reads aggregate npm and GitHub adoption statistics. npm downloads are downloads, not users: they include repeated npx runs, CI, caches, and other automated traffic.

Optional runtime telemetry is explicitly opt-in and sent at most once per active day. It contains package version, launch surface, a random identifier that rotates monthly, and counts by network, operation, and coarse outcome. See the privacy policy for the exact contract.

affiliate-networks-mcp telemetry status
affiliate-networks-mcp telemetry enable
affiliate-networks-mcp telemetry disable
Troubleshooting install

"Unknown skill: plugin" in a Claude session. The /plugin syntax is a shell command, not a chat slash command. Run claude plugin marketplace add ... from your terminal, not inside the conversation.

Cowork rejects the marketplace repo. Confirm the repo is private. Public repos are blocked for org-marketplace sync. Run npx affiliate-networks-mcp cowork-mirror to create a private mirror.

What affiliate networks… returns nothing. The MCP server is loaded but credentials are missing. Trigger the bundled affiliate-network-setup-help skill (ask "help me set up my affiliate network credentials") or run npx affiliate-networks-mcp setup in a terminal.

Stale npm cache. npx --yes affiliate-networks-mcp@latest forces a fresh fetch. Verify the published version with npm view affiliate-networks-mcp version.

What you can ask

The packaged skills are pre-written conversation patterns. You don't need to invoke them — Claude picks the right one based on what you type.

Publisher side
  • "What did I earn last month?" — consolidated earnings report across every publisher network, split by status (pending, approved, paid, reversed), with anything unpaid >90 days flagged.
  • "Are all my affiliate networks healthy?" — one-shot auth and capability check.
  • "Help me set up Awin" (or CJ, Impact, Rakuten) — guided credential setup with dashboard menu paths quoted verbatim.
  • "Audit the affiliate links in my sitemap at https://mysite.com/sitemap.xml" — reads the sitemap, classifies every affiliate link by network, and flags the dead or declined ones. URLs, HTML, or markdown also accepted directly.
Brand side
  • "How is Acme performing this quarter?" — single-brand report across that brand's bound networks. Top publishers, status splits, period-over-period delta.
  • "Show me revenue across all my clients this week." — portfolio rollup, brand-aggregated, with a "needs attention" subsection for brands trending down.
  • "Any anomalies in the affiliate data this week?" — week-over-week scan for revenue drops, reversal spikes, top-10 dropouts, dead programmes. Designed to run on a schedule via Claude's own scheduling.
  • "Set up Acme's strategy and KPIs" — bind the brand during setup, record advisory context with client-onboarding, then reports, anomaly watches, and portfolio rollups use it to frame verdicts. It never authorises a network write or changes the figures.

Networks

The repository currently ships 86 adapters across 72 network families. The breadth is real, but maturity varies; most adapters are experimental. Check the table below and REPORT.md before relying on one for production work.

Network Setup time Approval required Supported ops Notes
2Performant 5 min no 6 / 7 no clicks
AccessTrade 10 min no 6 / 7 no clicks
Adcell 10 min no 6 / 7 no clicks
Addrevenue 5 min no 7 / 7 pagination quirks
Admitad 15 min no 6 / 7 clicks gated
Admitad (advertiser) 12 min no 7 / 7 see notes
Adrecord 5 min no 6 / 7 no clicks
Adservice 10 min no 6 / 7 no clicks
Adtraction 5 min no 6 / 7 no clicks
Adtraction (advertiser) 6 min no 7 / 7 see notes
Affilae 5 min no 6 / 7 no clicks
Affiliate Future 5 min no 6 / 7 no clicks
Affise 10 min no 7 / 7 no clicks
Afilio 10 min no 6 / 7 no clicks
Amazon Creators 10 min yes (~1 days) 6 / 7 no clicks
AvantLink 10 min no 6 / 7 no clicks
Awin 5 min no 6 / 7 no clicks
Awin (advertiser) 6 min no 7 / 7 see notes
Belboon 10 min no 6 / 7 no clicks
CAKE 10 min no 6 / 7 no clicks
CJ Affiliate 8 min no 6 / 7 no clicks
CJ Affiliate (advertiser) 8 min no 7 / 7 pagination quirks
ClickBank 10 min no 6 / 7 no clicks
Commission Factory 10 min no 6 / 7 clicks gated
Commission Factory (advertiser) 7 min no 7 / 7 pagination quirks
Connexity 10 min no 6 / 7 no clicks
Coupang Partners 10 min no 6 / 7 no clicks
Daisycon 15 min no 6 / 7 no clicks
Daisycon (advertiser) 15 min no 7 / 7 see notes
Digistore24 5 min no 6 / 7 no clicks
eBay Partner Network 10 min yes (~3 days) 7 / 7 see notes
Eduzz 10 min no 6 / 7 no clicks
Effiliation 5 min no 6 / 7 no clicks
eHUB 5 min no 7 / 7 see notes
Everflow 10 min yes (~1 days) 7 / 7 see notes
Everflow (Advertiser) 10 min no 7 / 7 no clicks
financeAds 10 min yes (~2 days) 6 / 7 no clicks
FirstPromoter 5 min no 6 / 7 no clicks
FlexOffers 10 min no 6 / 7 no clicks
Flipkart Affiliate 10 min no 6 / 7 no clicks
GrowSurf 10 min no 6 / 7 no clicks
Hotmart 10 min no 6 / 7 no clicks
Howl 5 min no 6 / 7 clicks gated
Impact 6 min no 7 / 7 upstream variability
Impact (advertiser) 8 min no 7 / 7 see notes
Indoleads 5 min no 6 / 7 no clicks
Involve Asia 5 min no 6 / 7 no clicks
Kwanko 10 min no 6 / 7 no clicks
Kwanko (advertiser) 10 min no 6 / 7 no clicks
LeadDyno 5 min no 6 / 7 no clicks
Levanta 5 min no 6 / 7 no clicks
LinkConnector 5 min no 6 / 7 no clicks
Lomadee 15 min no 6 / 7 no clicks
Monetizze 5 min no 6 / 7 no clicks
mrge 10 min no 6 / 7 no clicks
NetRefer 15 min yes (~5 days) 6 / 7 no clicks
Offer18 10 min no 6 / 7 no clicks
Optimise Media 10 min no 6 / 7 no clicks
Partnerize 10 min no 7 / 7 no clicks
Partnerize (Advertiser) 5 min no 6 / 7 no clicks
Partnero 5 min no 6 / 7 no clicks
PartnerStack 5 min no 6 / 7 no clicks
PartnerStack (advertiser) 6 min no 7 / 7 no clicks
Pepperjam 5 min no 6 / 7 no clicks
Post Affiliate Pro 5 min no 6 / 7 no clicks
Profitshare 5 min no 6 / 7 no clicks
Rakuten Advertising 12 min yes (~5 days) 6 / 7 clicks gated
Refersion 5 min no 6 / 7 no clicks
Rewardful 5 min no 6 / 7 no clicks
Scaleo 10 min yes (~1 days) 7 / 7 see notes
ShareASale 10 min no 6 / 7 no clicks
ShopMy 10 min no 6 / 7 no clicks
Skimlinks 10 min no 6 / 7 no clicks
Sovrn Commerce 10 min no 6 / 7 no clicks
Tapfiliate 5 min no 6 / 7 no clicks
Tolt 5 min no 6 / 7 no clicks
Tradedoubler 15 min no 6 / 7 clicks gated
Tradedoubler (Advertiser) 10 min no 7 / 7 no clicks
TradeTracker 10 min no 7 / 7 see notes
Travelpayouts 5 min no 6 / 7 no clicks
TUNE 10 min no 7 / 7 no clicks
ValueCommerce 10 min no 6 / 7 no clicks
ValueCommerce (advertiser) 10 min no 6 / 7 no clicks
Webgains 10 min no 6 / 7 no clicks
Webgains (advertiser) 10 min no 7 / 7 see notes
Yieldkit 5 min no 7 / 7 see notes

A few networks make you wait for approval (eBay, Rakuten) before they hand over API access. The setup wizard tells you exactly what to do in each case. "Supported ops" being less than 7/7 just means the network itself doesn't expose that data to its users — not a missing feature on our side.

The (advertiser) rows are the brand-side adapters. They use a separate credential type from the publisher row (sometimes the same auth model with a different account behind it; the per-network notes spell out which), and the brand-id is selected per call rather than baked into the credential. Every brand-side adapter is read-only at v0.1 — the client refuses any non-GET HTTP method before it leaves your machine. The full editorial position, including known upstream quirks and the read-only stance, lives in REPORT.md.

Contribute in 10 minutes

A first PR shouldn't take longer than an evening. The path:

  1. Pick an issue. Browse the good-first-pr queue. Each has a file path, acceptance bullets, and a how-to-test line. Comment to claim it.

  2. Get to green. One command runs the full pre-PR check — typecheck, lint, tests, build — in a few seconds:

    git clone https://github.com/bobberrisford/affiliatemcp.git
    cd affiliatemcp
    npm install
    npm run verify
    

    If npm run verify passes locally, CI will pass.

  3. Open the PR. Use the default template (a short summary + test plan). First review within 24h on weekdays — see CONTRIBUTING.md for the full PR process and the four ranked help-wanted areas.

If you work for an affiliate network, the highest-leverage contribution is adopting your own adapter — see the adopt-this-network issues.

Wanted

Networks people have asked for but that don't have an adapter yet. If you work for one of these — or just have API access and want to contribute — this is the most useful place to start. See CONTRIBUTING.md for the workflow, and open (or pile onto) a tracking issue before you start.

Network Side wanted Notes Tracking issue

Awin reference implementation

Awin is the current reference slice for the repo's future shape. It keeps the seven canonical publisher tools and adds Awin-specific tools for accounts, programme details, commission groups, transaction-by-ID lookup, transaction queries, advertiser/creative/campaign reports, Link Builder, Offers, and safe stubs for gated Product Feed and Proof of Purchase APIs.

Start here if you want to understand the product direction:

Where your credentials live

When you run the setup wizard it writes a single file at ~/.affiliate-mcp/.env on your machine, locked to your user account (file mode 0600). That's the only place your API keys exist outside the network dashboards. Both publisher and brand-side credentials live here, each keyed by network slug; open, edit, delete, or copy it like any other file.

If you registered any brand-side networks, the wizard also writes ~/.affiliate-mcp/brands.json next to it, mapping your local nickname for each brand (e.g. acme) to the network's brand id on every network the brand is bound to (empty for the publisher-only path).

That local path stays free and complete; an opt-in hosted tier is live for four networks.

Managing brands

The brand-side flow adds one concept: a local brand slug. You give each client (or each of your own brands) a short nickname; the tool maps it to the network's own brand id on every network the brand is registered on. A real brands.json looks like this:

{
  "version": 1,
  "brands": {
    "acme": [
      { "network": "impact-advertiser", "credentialId": "default", "networkBrandId": "IA-12345" },
      { "network": "cj-advertiser", "credentialId": "default", "networkBrandId": "7654321" }
    ]
  }
}

The same logical brand can appear under multiple networks; that's how "earnings for Acme across all networks" fans out across the right brand id on each one. You can hand-edit this file to rename, remove, or add brands, or re-run npx affiliate-networks-mcp setup to register new ones interactively (the wizard skips brands already in the file).

Three skills are tuned for the brand side: programme-performance-report (single-brand, per-publisher rollup), agency-portfolio-rollup (every brand × network, brand-aggregated), and programme-anomaly-watch (scheduled week-over-week anomaly scan).

Use it from the terminal

call runs the same registered operations as the MCP server, for quick checks, scripts, and CI (call --help for full usage). Some calls contact an upstream network (for example generate_tracking_link mints a link). Schema-aware key=value parsing keeps string ids, converts numbers, and takes comma-separated or JSON arrays; --args '<json>' passes a full object. Results are JSON on stdout; failures are NetworkErrorEnvelope JSON on stderr with a non-zero exit.

npx affiliate-networks-mcp call --list [--network awin]
npx affiliate-networks-mcp call --describe awin list_transactions
npx affiliate-networks-mcp call awin list_transactions from=2026-01-01 limit=50

When something goes wrong

npx affiliate-networks-mcp doctor

That runs a live diagnostic across every configured network and tells you, in English, what's broken and how to fix it. If a specific network is misbehaving, append its slug:

npx affiliate-networks-mcp doctor rakuten

Most failures are one of three things: an expired token, a network that needs your approval re-confirmed, or a credential typed with a trailing space. The JSON also reports clientStrategies health; it never deletes them.

Per-network setup notes

Each network has a short page covering dashboard navigation, where to click for credentials, and common stumbling blocks:

Publisher side:

  • Awin — API token + publisher ID.
  • CJ Affiliate — Developer Key (GraphQL).
  • eBay Partner Network — OAuth client + secret + campaign ID; approval required.
  • Everflow — API key (admin-issued); experimental, built from public docs.
  • Impact — Account SID + Auth Token.
  • mrge — API key + secret + site ID; experimental, built from public docs.
  • Partnerize — application key + user API key; experimental, built from public docs.
  • PartnerStack — Partner API key; experimental, built from public docs.
  • Rakuten Advertising — OAuth client + SID; approval required.
  • Skimlinks — OAuth client ID + secret + publisher ID + domain ID; experimental, built from public docs.
  • Sovrn Commerce — API key + secret key; experimental, built from public docs.
  • Tradedoubler — bearer token + organisation ID; experimental, built from public docs.
  • Admitad — OAuth2 client ID + secret + website ID; experimental, built from public docs.
  • Adservice — UID + login token (cookie session); experimental, built from public docs.
  • Adtraction — API token; experimental, built from public docs.
  • Afilio — affiliate token + Aff ID; experimental, built from public docs.
  • Commission Factory — API key; experimental, built from public docs.
  • Coupang Partners — access key + secret key (HMAC); experimental, built from public docs.
  • Daisycon — OAuth2 client ID + secret + refresh token + publisher ID; experimental, built from public docs.
  • Eduzz — email + public key + API key; experimental, built from public docs.
  • FlexOffers — API key; experimental, built from public docs.
  • Hotmart — OAuth2 client ID + secret; experimental, built from public docs.
  • Indoleads — bearer token; experimental, built from public docs.
  • Kwanko — API token; experimental, built from public docs.
  • Lomadee — app token + source ID + publisher ID + report login; experimental, built from public docs.
  • Monetizze — API key; experimental, built from public docs.
  • ValueCommerce — report-API key pair; experimental, built from public docs.
  • Webgains — API key + publisher ID + campaign ID; experimental, built from public docs.
  • Affise — per-tenant base URL + API-Key header; tenant CPA engine; experimental, built from public docs.
  • Scaleo — per-tenant base URL + API key (query param); tenant engine; experimental, built from public docs.
  • Offer18 — per-tenant base URL + key/aid/mid (query params); tenant engine; experimental, built from public docs.
  • CAKE — per-instance base URL + API key + affiliate ID (XML API); experimental, built from public docs.
  • NetRefer — per-operator base URL + OAuth2 (Azure AD); iGaming ASR reporting; experimental, built from public docs.
  • Affilae — Bearer token; single-brand; FR network; experimental, built from public docs.
  • Optimise Media — apikey header (Service Account); UK/IN/APAC; experimental, built from public docs.
  • AccessTrade — Token header + site ID; SE-Asia/Japan, per-country base URL; experimental, built from public docs.
  • Travelpayouts — X-Access-Token; global travel; experimental, built from public docs.
  • Flipkart Affiliate — affiliate ID + token headers; India; experimental, built from public docs.
  • Adrecord — APIKEY header; Nordic; experimental, built from public docs.
  • Addrevenue — Bearer token + channel ID; Nordic; experimental, built from public docs.
  • ShareASale — affiliate ID + token + secret (signed); US; experimental, built from public docs.
  • Pepperjam — apiKey query param; US (Ascend, distinct from Partnerize); experimental, built from public docs.
  • AvantLink — affiliate ID + auth key + website ID (query params); US/outdoor; experimental, built from public docs.
  • Digistore24 — X-DS-API-KEY header; DE digital products; experimental, built from public docs.
  • ClickBank — DEV:CLERK key header + nickname; digital products; experimental, built from public docs.
  • TUNE — NetworkId + api_key (per-tenant host); HasOffers engine; experimental, built from public docs.
  • Involve Asia — key + secret (token exchange); APAC; experimental, built from public docs.
  • TradeTracker — customer ID + passphrase + site ID (SOAP session); NL/EU; experimental, built from public docs.
  • Amazon Creators — API key + partner tag; single programme per marketplace; experimental, built from public docs.
  • Belboon — magic key + user ID (CSV export); DACH; experimental, built from public docs.
  • financeAds — API key + publisher ID; DACH finance; experimental, built from public docs.
  • Adcell — API key + affiliate ID; DACH; experimental, built from public docs.
  • ShopMy — Brand Partner token; US creator network; experimental, built from public docs.
  • Levanta — Bearer token; Amazon creator platform; experimental, built from public docs.
  • Howl — NRTV-API-KEY header + publisher ID; creator link network; smart-link minting; experimental, built from public docs.
  • Yieldkit — api_key + secret (query params); link monetisation; clicks supported; experimental, built from public docs.
  • eHUB — apiKey query param + publisher ID; CZ/CEE; clicks supported; experimental, built from public docs.
  • LinkConnector — API key (query param); US; experimental, built from public docs.
  • Connexity — publisher ID + API key; US CPC-commerce (distinct from Skimlinks); experimental, built from public docs.
  • Affiliate Future — API key + password (query params); UK; 1-day pull window; experimental, built from public docs.
  • Effiliation — API key (query param); FR; experimental, built from public docs.
  • 2Performant — email + password (session login); Romania; experimental, built from public docs.
  • Profitshare — API user + key (HMAC-signed); Romania; experimental, built from public docs.

Brand / advertiser side:

  • Awin (advertiser) — OAuth bearer token; multi-brand via GET /accounts; gated to Accelerate / Advanced plans; read-only.
  • CJ Affiliate (advertiser) — Personal Access Token (GraphQL); multi-brand via CID list; read-only.
  • Everflow (advertiser) — API key (admin-issued); multi-brand; experimental, built from public docs.
  • Impact (advertiser) — Account SID + Auth Token; agency or brand-direct; read-only.
  • Partnerize (advertiser) — application key + user API key; multi-brand; experimental, built from public docs.
  • PartnerStack (advertiser) — public + secret key pair (Vendor API); single-brand; experimental, built from public docs.
  • Tradedoubler (advertiser) — reports token + organisation ID; multi-brand; experimental, built from public docs.
  • Admitad (advertiser) — OAuth2 client ID + secret + advertiser ID; multi-brand; read-only; experimental, built from public docs.
  • Adtraction (advertiser) — API token; multi-brand; read-only (POST-read allowlist); experimental, built from public docs.
  • Commission Factory (advertiser) — API key; read-only; experimental, built from public docs.
  • Daisycon (advertiser) — OAuth2 client ID + secret + refresh token; multi-brand; read-only; experimental, built from public docs.
  • Kwanko (advertiser) — API token; multi-brand; read-only; experimental, built from public docs.
  • ValueCommerce (advertiser) — report-API key pair; multi-brand; read-only; experimental, built from public docs.
  • Webgains (advertiser) — API key + account ID; multi-brand; read-only; experimental, built from public docs.
  • Rewardful — API Secret (HTTP Basic); single-brand; Stripe-native SaaS; experimental, built from public docs.
  • FirstPromoter — API key + account ID (Bearer); single-brand; SaaS-referral; experimental, built from public docs.
  • Partnero — API token (Bearer); single-brand; SaaS-referral; experimental, built from public docs.
  • GrowSurf — API key + campaign ID (Bearer); single-brand; referral-credit SaaS; experimental, built from public docs.
  • LeadDyno — private key (query param); single-brand; SaaS-referral; experimental, built from public docs.
  • Post Affiliate Pro — per-tenant base URL + API key (Bearer); single-brand; SaaS engine; experimental, built from public docs.
  • Tolt — Bearer key; single-brand; SaaS-referral; experimental, built from public docs.
  • Refersion — public + secret key headers; single-brand; Shopify-heavy SaaS; experimental, built from public docs.
  • Tapfiliate — X-Api-Key header; single-brand; SaaS-referral; experimental, built from public docs.

For the curious (or technical)

affiliate-mcp has five practical layers. Adapters under src/networks/ handle each network's auth, API quirks, normalisation, and capability metadata. MCP tools expose typed operations such as affiliate_awin_list_transactions; six meta-tools cover listing, diagnostics, brand resolution, and advisory client strategy. Skills and workflows compose tools into affiliate jobs. MCP prompts are reusable templates and currently Awin-specific. Setup paths connect the same local server to Claude Desktop, Claude Code, Codex, Cowork, or another compatible local stdio MCP client.

The packaged skills under skills/ are the conversation patterns Claude follows for common requests. Publisher side: affiliate-earnings-report, affiliate-network-status, affiliate-network-setup-help, audit-affiliate-links. Brand side: programme-performance-report, agency-portfolio-rollup, programme-anomaly-watch.

For per-network capability detail, known upstream quirks, and the editorial baseline used when accepting new network claims, see REPORT.md. It is regenerated from each adapter's network.json on every merge, so it stays in step with the code.

Repository layout

If you're poking around the source, the top-level folders are:

  • src/ — the MCP server. Entry point index.ts; one folder per network under src/networks/ (publisher adapters at <slug>/, advertiser adapters at <slug>-advertiser/); shared primitives under src/shared/; bundled Claude skills under skills/.
  • docs/networks/ — per-network setup walkthroughs (dashboard navigation, credentials, common failures), publisher and advertiser side.
  • docs/README.md — documentation map, authority order, and review rules.
  • templates/new-network/ — scaffold to copy when adding a new network adapter.
  • scripts/ — generators and validators (validate:network, generate:readme, generate:report).
  • tests/ — vitest suite. No live API calls; everything runs against verbatim fixtures.
  • examples/ — Claude Desktop config snippet.

Adding a network

If you work for an affiliate network, the canonical path is in CONTRIBUTING.md under "Adopting your network". You can take ownership via .github/CODEOWNERS, verify the adapter with live evidence, and cover whichever sides your API exposes. Adoption does not automatically grant production; promotion follows the same evidence, freshness, and maintainer-review gates as every adapter.

If your favourite network isn't in the table and you don't work for it, you can add it anyway — and you don't necessarily need to be a developer to do it. Open this repo in Claude Code and say "add [network name] to affiliate-mcp". The contribute skill kicks in and walks the whole process: it asks early which side you're adding (publisher, brand-side, or both), picks the right scaffold and credential-scope conventions, researches the network's API, writes the tests, drafts the docs. You're the editor; Claude does the typing.

If you'd rather drive it yourself, CONTRIBUTING.md is the human-side workflow, AGENTS.md is the primer for AI coding agents, and templates/new-network/ is the scaffold to copy. Networks people most often ask for are tracked in GitHub Issues under the good first issue label.

Local development:

npm install
npm test
npm run typecheck
npm run lint
npm run build

Status

Beta — available now. The repository contains 86 adapters across 72 network families: 63 publisher-side and 23 advertiser-side. Support varies by adapter; check the generated network table and REPORT.md for each adapter's declared operations, claim status, and known limitations. Adapters remain partial or experimental until their behaviour is confirmed against real publisher, agency, or in-house brand accounts.

Licence

MIT. See LICENCE.

Acknowledgements

This project is only possible because the engineering teams at Awin, CJ Affiliate, eBay Partner Network, Impact, and Rakuten Advertising publish public, documented APIs — both the publisher endpoints and (for Awin, CJ, and Impact) the brand-side advertiser endpoints. These adapters read those APIs directly. Where a network has no usable API, an adapter may instead drive the user's own dashboard session (browser-driven).

1# affiliate-mcp
2 
3> Integrate your affiliate networks with Claude or Codex.
4 
5[![npm version](https://img.shields.io/npm/v/affiliate-networks-mcp?label=release)](https://www.npmjs.com/package/affiliate-networks-mcp) ![networks](https://img.shields.io/badge/networks-72-blue) ![adapters](https://img.shields.io/badge/adapters-86-blue) [![maintained by](https://img.shields.io/badge/maintained%20by-community%20%2F%20networks-orange)](./docs/networks)
6 
7> **Network operators:** most adapters are community-built and `experimental`. Adoption gives your team ownership and a verification path; promotion to `partial` or `production` still requires current evidence and maintainer review. Find your network's issue under the [`adopt-this-network`](https://github.com/bobberrisford/affiliatemcp/issues?q=is%3Aissue+is%3Aopen+label%3Aadopt-this-network) label.
8 
9Affiliate networks have two sides — and neither has a first-class AI workspace integration.
10 
11**Publishers** earn commissions from the programmes they join.
12**Brands** (and the agencies who manage them) run those programmes
13and pay the commissions out. I wanted to chat to my own affiliate
14data in the AI workspace I already use; none of the networks had shipped an
15integration for either side, so I built a broad beta set that covers both
16publisher and advertiser-side work.
17 
18If you're a **publisher**, you can ask:
19 
20> *"What did I earn across all networks last month?"*
21>
22> *"Which programmes have transactions still pending after 90 days?"*
23>
24> *"Compare my earnings month on month."*
25 
26If you're on the **brand side** — running a programme, or an agency
27managing several — you can ask:
28 
29> *"How is Acme's programme doing this quarter?"*
30>
31> *"Show me revenue across all my clients this week."*
32>
33> *"Any anomalies in the affiliate data?"*
34 
35Your AI workspace figures out which networks to call, fetches the data live from
36their APIs, and gives you the answer. You can use Claude or Codex to turn it
37into a sheet, an artifact, an email to your boss, whatever you want.
38 
39Free and open source. MIT licensed. Bring your own keys. For the product
40philosophy, read the [AI-native affiliate data manifesto](./docs/product/manifesto.md).
41 
42## Who this is for
43 
44This tool serves two audiences. Pick the one that fits — or both, if
45you wear both hats.
46 
47**You're a publisher.** You earn commissions from affiliate
48programmes, your dashboards can't keep up with how fast you can think,
49and you want one conversation that spans every network you're on.
50 
51**You're on the brand side.** You run an affiliate programme — or
52you're an agency managing several brands' programmes. You want one
53question that fans out across networks and brands, and surfaces what
54the dashboards bury: publishers trending down, reversal spikes, dead
55links, programmes drifting toward zero.
56 
57Either way, you do **not** need to know what an API is or write code. The
58non-technical Claude Desktop track needs:
59 
60- Your existing logins to the affiliate networks you already work with.
61- Claude Desktop installed.
62 
63The technical track uses a terminal, Node.js 20 or newer, and Claude Desktop,
64Claude Code, Codex, or another compatible local stdio MCP client; check the support states below before relying on an untested client journey.
65 
66**And if you work for an affiliate network**, this is also for you. The
67bundled adapters are placeholders until each network adopts its own. See
68[`CONTRIBUTING.md`](./CONTRIBUTING.md) under "Adopting your network".
69 
70## Why bother?
71 
72**One question, every network and every brand.** "Show me earnings by
73programme" hits your configured publisher networks in parallel. On the brand
74side, "show me revenue across all my clients this week" fans out across every
75brand and network pair you've registered.
76 
77**Plain English, not filters.** No more clicking through date pickers and saved
78views. "Last quarter, status pending, sorted by amount" is the whole prompt.
79 
80**Your data, your machine, by default.** It runs locally. Your keys live in
81`~/.affiliate-mcp/.env`, locked to your user account. Optional anonymous
82usage telemetry is off by default and never contains affiliate data,
83credentials, prompts, arguments, results, or error text. The networks see
84the same API calls they'd see from their dashboard.
85 
86**Catches what dashboards bury.** Stale transactions, inactive programmes, dead
87deeplinks and week-on-week drops are surfaced by the packaged skills.
88 
89**Optional local result cache.** Persistent caching is off by default. Set
90`AFFILIATE_MCP_CACHE=on` in `~/.affiliate-mcp/.env` to cache selected programme
91inventory and closed reporting windows locally with owner-only permissions.
92Open and current windows always go live. On a shared machine where you cannot
93rely on file permissions, leave caching off. Run
94`affiliate-networks-mcp cache clear` to remove cached results; see
95[`PRIVACY.md`](./PRIVACY.md) for the storage and retention contract.
96 
97## Getting started
98 
99Choose one of two primary tracks. Both run the same local MCP server and keep your credentials on your machine.
100 
101### Track 1: non-technical, Claude Desktop
102 
103Use the host-native Claude Desktop `.mcpb`. No Terminal, Node.js, or manual
104configuration is required.
105 
1061. Download `affiliate-networks-mcp-<version>.mcpb` from the latest
107 [GitHub release](https://github.com/bobberrisford/affiliatemcp/releases/latest).
1082. In Claude Desktop, open **Settings → Extensions → Advanced settings →
109 Install Extension…** and select the downloaded file.
1103. Add credentials for the networks you use, then ask Claude
111 **"What affiliate networks do you have access to?"**
112 
113The extension does not update itself: download the latest `.mcpb` and install it over the top; saved credentials are kept ([full steps for every install path](./docs/updating.md)).
114The native extension currently offers secure setup fields for Awin, CJ, Impact,
115and Partnerize. It runs the complete server, so an existing
116`~/.affiliate-mcp/.env` continues to enable every other adapter. A portable
117browser setup flow for the remaining networks is planned; until then, use the
118technical track below when adding them.
119 
120The standalone Electron/DMG setup app is a **fixes-only compatibility
121fallback** for existing macOS users. It is not a third primary onboarding
122track. See [`desktop/README.md`](./desktop/README.md) for its remaining use
123case.
124 
125### Track 2: technical and semi-technical, CLI plus local stdio
126 
127You'll need Node.js 20 or newer installed. If you don't have it, use the
128[Node.js download page](https://nodejs.org/).
129 
130**1. Run the setup wizard.** Open Terminal (macOS) or PowerShell (Windows):
131 
132```
133npx affiliate-networks-mcp setup
134```
135 
136It walks you through one network at a time, asks which **side** you want,
137shows where to find each credential, then checks it against the live network.
138 
139For brand-side networks, the wizard asks which brands those credentials can
140reach, then lets you pick local nicknames. The mapping is saved to
141`~/.affiliate-mcp/brands.json`, see [Managing brands](#managing-brands).
142 
143**2. Check everything is wired up.**
144 
145```
146npx affiliate-networks-mcp test
147```
148 
149You should see one line per network: `ok` for everything that's healthy,
150`error — <reason>` for anything that isn't.
151 
152**3. Connect it to your local MCP client.** Use a host-native package, the CLI
153installer, or local stdio configuration. The setup wizard offers the shipped
154CLI installer targets at the end automatically.
155 
156**Claude Desktop (Mac/Windows app):**
157 
158```
159npx affiliate-networks-mcp install
160```
161 
162Finds your Claude Desktop config, adds the `affiliate` entry alongside
163anything else you already have, takes a timestamped backup first. Restart
164Claude Desktop after it finishes. Flags: `--desktop` / `--code` / `--codex`
165to pick one, `--all` to include Codex and skip prompting, `--dry-run` to
166preview, `--force-overwrite` if
167your existing config is malformed JSON.
168 
169**Claude Code (terminal):**
170 
171```
172claude plugin marketplace add bobberrisford/affiliatemcp
173claude plugin install affiliate-networks-mcp@affiliatemcp
174```
175 
176Registers the MCP server and bundled skills in one step. (Or use the
177`install` command above — it detects Claude Code too.) Already inside a
178Claude Code session? Just ask it to install the affiliate-mcp plugin and it
179runs these commands for you; no terminal juggling needed.
180 
181**Codex (OpenAI, terminal or IDE extension):**
182 
183```
184npx affiliate-networks-mcp install --codex
185```
186 
187This adds the local stdio MCP server to `~/.codex/config.toml`; the same MCP
188config is used by the Codex CLI and Codex IDE extension. Manual setup:
189 
190```
191codex mcp add affiliate -- npx -y affiliate-networks-mcp
192```
193 
194Verify: open Codex, run `/mcp`, then ask **"What affiliate networks do you
195have access to?"** This is OpenAI/Codex support, not ChatGPT connector
196support. ChatGPT requires a reachable HTTPS MCP server and is scoped separately.
197 
198**Claude Cowork desktop (org accounts):**
199 
200Cowork syncs plugins from a GitHub repo, but blocks **public** repos from org
201marketplaces — so you need a **private mirror** first. The setup wizard offers
202this at the end, or run `install` and pick Cowork:
203 
204```
205npx affiliate-networks-mcp install # detects your clients, offers Cowork
206```
207 
208(Or go straight to it: `npx affiliate-networks-mcp cowork-mirror`.)
209 
210It creates `<you>/affiliatemcp-internal` as a private repo and mirrors the
211upstream into it. If you have the GitHub CLI (`gh`) signed in, it's used
212automatically; otherwise it tells you exactly where to get a GitHub token and
213prompts you to paste it — the same "paste a credential" flow as setting up a
214network. Re-run with `--sync` to refresh against new releases.
215 
216Then, with **org-admin** access, in Cowork: **Organization settings → Plugins
217→ Add plugin → GitHub** → enter `<you>/affiliatemcp-internal` → install
218`affiliate-networks-mcp` from the synced marketplace.
219 
220<details>
221<summary>Prefer to edit Claude Desktop config by hand?</summary>
222 
223Open the Claude Desktop config file at:
224 
225- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
226- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
227 
228Add the `affiliate` entry inside `mcpServers` — keep any siblings:
229 
230```json
231{
232 "mcpServers": {
233 "affiliate": {
234 "command": "npx",
235 "args": ["affiliate-networks-mcp"]
236 }
237 }
238}
239```
240 
241Restart Claude Desktop after saving.
242 
243</details>
244 
245For another local stdio MCP client, configure the server command
246`npx -y affiliate-networks-mcp`. These clients are compatible in principle,
247not yet tested first-party journeys. Draft PR
248[#49](https://github.com/bobberrisford/affiliatemcp/pull/49) is the existing
249VS Code/Copilot installer candidate.
250 
251### Client support states
252 
253These labels describe the onboarding journey, not whether every network adapter
254is live-verified. "Tested" means repository-owned automated validation, not live
255proof against every host version. See [`REPORT.md`](./REPORT.md) for maturity.
256 
257| Client or path | Support state | What that means |
258| --- | --- | --- |
259| Claude Desktop `.mcpb` | **Shipped and release-tested** | Primary non-technical path. CI builds and smoke-tests the bundle. Secure setup fields currently cover Awin, CJ, Impact, and Partnerize. |
260| Claude Desktop CLI/manual config | **Shipped and tested** | Technical local stdio path. Installer/config behaviour has automated coverage. |
261| Claude Code plugin and CLI registration | **Shipped and tested** | Technical path with packaged skills and local MCP registration. |
262| Codex CLI and IDE extension | **Shipped and tested** | Technical path using the shared local Codex MCP configuration. This is not ChatGPT connector support. |
263| Hosted connector (`mcp.agenticaffiliate.ai`) | **Shipped and tested, paid** | Remote MCP over OAuth, for people who cannot run the local server. Any client that can add a custom connector can use it, including Claude. Covers four networks (Awin, CJ, Impact, Rakuten), not every adapter. Read-only; credentials sit in an encrypted vault and browser-driven operations stay local-only. See [`PRIVACY.md`](./PRIVACY.md) and the [security page](https://agenticaffiliate.ai/security.html). |
264| Claude Cowork private mirror | **Partially shipped** | Requires a private mirror and org-admin follow-through; it is not a simple individual setup path. |
265| Cursor, VS Code, and generic local MCP clients | **Possible, not yet a tested first-party journey** | The local stdio server is compatible in principle. Client-specific setup, packaging, and support ownership are tracked in [#207](https://github.com/bobberrisford/affiliatemcp/issues/207). |
266| Portable browser credential setup | **Planned, not shipped** | Intended to make all network credentials available without a terminal. Its security and DMG-retirement decision is tracked in [#206](https://github.com/bobberrisford/affiliatemcp/issues/206). |
267| ChatGPT | **Possible through the hosted connector, not yet a tested first-party journey** | ChatGPT cannot use this local stdio server directly, so it needs the hosted connector above; the free local path is not available to it. No tested ChatGPT setup walkthrough and no connector-directory listing yet. |
268 
269**Check it worked.** In a new Claude conversation, ask **"What affiliate
270networks do you have access to?"** — you should see every network you
271configured. If you registered any brands, also try **"list my brands"**.
272 
273To disconnect later: `npx affiliate-networks-mcp uninstall`, or
274`claude plugin uninstall affiliate-networks-mcp` for the plugin path.
275 
276## Anonymous telemetry
277 
278The project reads aggregate npm and GitHub adoption statistics. npm downloads
279are downloads, not users: they include repeated `npx` runs, CI, caches, and
280other automated traffic.
281 
282Optional runtime telemetry is explicitly opt-in and sent at most once per
283active day. It contains package version, launch surface, a random identifier
284that rotates monthly, and counts by network, operation, and coarse outcome. See
285the [privacy policy](./PRIVACY.md) for the exact contract.
286 
287```sh
288affiliate-networks-mcp telemetry status
289affiliate-networks-mcp telemetry enable
290affiliate-networks-mcp telemetry disable
291```
292 
293### Troubleshooting install
294 
295**"Unknown skill: plugin" in a Claude session.** The `/plugin` syntax is a
296shell command, not a chat slash command. Run `claude plugin marketplace
297add ...` from your terminal, not inside the conversation.
298 
299**Cowork rejects the marketplace repo.** Confirm the repo is **private**.
300Public repos are blocked for org-marketplace sync. Run `npx
301affiliate-networks-mcp cowork-mirror` to create a private mirror.
302 
303**`What affiliate networks…` returns nothing.** The MCP server is loaded
304but credentials are missing. Trigger the bundled
305[`affiliate-network-setup-help`](./skills/affiliate-network-setup-help/SKILL.md)
306skill (ask "help me set up my affiliate network credentials") or run
307`npx affiliate-networks-mcp setup` in a terminal.
308 
309**Stale npm cache.** `npx --yes affiliate-networks-mcp@latest` forces a
310fresh fetch. Verify the published version with
311`npm view affiliate-networks-mcp version`.
312 
313## What you can ask
314 
315The packaged skills are pre-written conversation patterns. You don't
316need to invoke them — Claude picks the right one based on what you
317type.
318 
319### Publisher side
320 
321- **"What did I earn last month?"** — consolidated earnings report
322 across every publisher network, split by status (pending, approved,
323 paid, reversed), with anything unpaid >90 days flagged.
324- **"Are all my affiliate networks healthy?"** — one-shot auth and
325 capability check.
326- **"Help me set up Awin"** *(or CJ, Impact, Rakuten)* — guided
327 credential setup with dashboard menu paths quoted verbatim.
328- **"Audit the affiliate links in my sitemap at https://mysite.com/sitemap.xml"**
329 — reads the sitemap, classifies every affiliate link by network,
330 and flags the dead or declined ones. URLs, HTML, or markdown also
331 accepted directly.
332 
333### Brand side
334 
335- **"How is Acme performing this quarter?"** — single-brand report
336 across that brand's bound networks. Top publishers, status splits,
337 period-over-period delta.
338- **"Show me revenue across all my clients this week."** — portfolio
339 rollup, brand-aggregated, with a "needs attention" subsection for
340 brands trending down.
341- **"Any anomalies in the affiliate data this week?"** — week-over-week
342 scan for revenue drops, reversal spikes, top-10 dropouts, dead
343 programmes. Designed to run on a schedule via Claude's own scheduling.
344- **"Set up Acme's strategy and KPIs"** — bind the brand during setup, record
345 advisory context with `client-onboarding`, then reports, anomaly watches, and
346 portfolio rollups use it to frame verdicts. It never authorises a network
347 write or changes the figures.
348 
349## Networks
350 
351The repository currently ships 86 adapters across 72 network families. The
352breadth is real, but maturity varies; most adapters are `experimental`. Check
353the table below and [`REPORT.md`](./REPORT.md) before relying on one for
354production work.
355 
356<!-- AFFILIATE_MCP_NETWORK_TABLE_START -->
357| Network | Setup time | Approval required | Supported ops | Notes |
358| --- | ---: | --- | ---: | --- |
359| 2Performant | 5 min | no | 6 / 7 | no clicks |
360| AccessTrade | 10 min | no | 6 / 7 | no clicks |
361| Adcell | 10 min | no | 6 / 7 | no clicks |
362| Addrevenue | 5 min | no | 7 / 7 | pagination quirks |
363| Admitad | 15 min | no | 6 / 7 | clicks gated |
364| Admitad (advertiser) | 12 min | no | 7 / 7 | see notes |
365| Adrecord | 5 min | no | 6 / 7 | no clicks |
366| Adservice | 10 min | no | 6 / 7 | no clicks |
367| Adtraction | 5 min | no | 6 / 7 | no clicks |
368| Adtraction (advertiser) | 6 min | no | 7 / 7 | see notes |
369| Affilae | 5 min | no | 6 / 7 | no clicks |
370| Affiliate Future | 5 min | no | 6 / 7 | no clicks |
371| Affise | 10 min | no | 7 / 7 | no clicks |
372| Afilio | 10 min | no | 6 / 7 | no clicks |
373| Amazon Creators | 10 min | yes (~1 days) | 6 / 7 | no clicks |
374| AvantLink | 10 min | no | 6 / 7 | no clicks |
375| Awin | 5 min | no | 6 / 7 | no clicks |
376| Awin (advertiser) | 6 min | no | 7 / 7 | see notes |
377| Belboon | 10 min | no | 6 / 7 | no clicks |
378| CAKE | 10 min | no | 6 / 7 | no clicks |
379| CJ Affiliate | 8 min | no | 6 / 7 | no clicks |
380| CJ Affiliate (advertiser) | 8 min | no | 7 / 7 | pagination quirks |
381| ClickBank | 10 min | no | 6 / 7 | no clicks |
382| Commission Factory | 10 min | no | 6 / 7 | clicks gated |
383| Commission Factory (advertiser) | 7 min | no | 7 / 7 | pagination quirks |
384| Connexity | 10 min | no | 6 / 7 | no clicks |
385| Coupang Partners | 10 min | no | 6 / 7 | no clicks |
386| Daisycon | 15 min | no | 6 / 7 | no clicks |
387| Daisycon (advertiser) | 15 min | no | 7 / 7 | see notes |
388| Digistore24 | 5 min | no | 6 / 7 | no clicks |
389| eBay Partner Network | 10 min | yes (~3 days) | 7 / 7 | see notes |
390| Eduzz | 10 min | no | 6 / 7 | no clicks |
391| Effiliation | 5 min | no | 6 / 7 | no clicks |
392| eHUB | 5 min | no | 7 / 7 | see notes |
393| Everflow | 10 min | yes (~1 days) | 7 / 7 | see notes |
394| Everflow (Advertiser) | 10 min | no | 7 / 7 | no clicks |
395| financeAds | 10 min | yes (~2 days) | 6 / 7 | no clicks |
396| FirstPromoter | 5 min | no | 6 / 7 | no clicks |
397| FlexOffers | 10 min | no | 6 / 7 | no clicks |
398| Flipkart Affiliate | 10 min | no | 6 / 7 | no clicks |
399| GrowSurf | 10 min | no | 6 / 7 | no clicks |
400| Hotmart | 10 min | no | 6 / 7 | no clicks |
401| Howl | 5 min | no | 6 / 7 | clicks gated |
402| Impact | 6 min | no | 7 / 7 | upstream variability |
403| Impact (advertiser) | 8 min | no | 7 / 7 | see notes |
404| Indoleads | 5 min | no | 6 / 7 | no clicks |
405| Involve Asia | 5 min | no | 6 / 7 | no clicks |
406| Kwanko | 10 min | no | 6 / 7 | no clicks |
407| Kwanko (advertiser) | 10 min | no | 6 / 7 | no clicks |
408| LeadDyno | 5 min | no | 6 / 7 | no clicks |
409| Levanta | 5 min | no | 6 / 7 | no clicks |
410| LinkConnector | 5 min | no | 6 / 7 | no clicks |
411| Lomadee | 15 min | no | 6 / 7 | no clicks |
412| Monetizze | 5 min | no | 6 / 7 | no clicks |
413| mrge | 10 min | no | 6 / 7 | no clicks |
414| NetRefer | 15 min | yes (~5 days) | 6 / 7 | no clicks |
415| Offer18 | 10 min | no | 6 / 7 | no clicks |
416| Optimise Media | 10 min | no | 6 / 7 | no clicks |
417| Partnerize | 10 min | no | 7 / 7 | no clicks |
418| Partnerize (Advertiser) | 5 min | no | 6 / 7 | no clicks |
419| Partnero | 5 min | no | 6 / 7 | no clicks |
420| PartnerStack | 5 min | no | 6 / 7 | no clicks |
421| PartnerStack (advertiser) | 6 min | no | 7 / 7 | no clicks |
422| Pepperjam | 5 min | no | 6 / 7 | no clicks |
423| Post Affiliate Pro | 5 min | no | 6 / 7 | no clicks |
424| Profitshare | 5 min | no | 6 / 7 | no clicks |
425| Rakuten Advertising | 12 min | yes (~5 days) | 6 / 7 | clicks gated |
426| Refersion | 5 min | no | 6 / 7 | no clicks |
427| Rewardful | 5 min | no | 6 / 7 | no clicks |
428| Scaleo | 10 min | yes (~1 days) | 7 / 7 | see notes |
429| ShareASale | 10 min | no | 6 / 7 | no clicks |
430| ShopMy | 10 min | no | 6 / 7 | no clicks |
431| Skimlinks | 10 min | no | 6 / 7 | no clicks |
432| Sovrn Commerce | 10 min | no | 6 / 7 | no clicks |
433| Tapfiliate | 5 min | no | 6 / 7 | no clicks |
434| Tolt | 5 min | no | 6 / 7 | no clicks |
435| Tradedoubler | 15 min | no | 6 / 7 | clicks gated |
436| Tradedoubler (Advertiser) | 10 min | no | 7 / 7 | no clicks |
437| TradeTracker | 10 min | no | 7 / 7 | see notes |
438| Travelpayouts | 5 min | no | 6 / 7 | no clicks |
439| TUNE | 10 min | no | 7 / 7 | no clicks |
440| ValueCommerce | 10 min | no | 6 / 7 | no clicks |
441| ValueCommerce (advertiser) | 10 min | no | 6 / 7 | no clicks |
442| Webgains | 10 min | no | 6 / 7 | no clicks |
443| Webgains (advertiser) | 10 min | no | 7 / 7 | see notes |
444| Yieldkit | 5 min | no | 7 / 7 | see notes |
445<!-- AFFILIATE_MCP_NETWORK_TABLE_END -->
446 
447A few networks make you wait for approval (eBay, Rakuten) before they
448hand over API access. The setup wizard tells you exactly what to do
449in each case. "Supported ops" being less than 7/7 just means the
450network itself doesn't expose that data to its users — not a missing
451feature on our side.
452 
453The **(advertiser)** rows are the brand-side adapters. They use a
454separate credential type from the publisher row (sometimes the same
455auth model with a different account behind it; the per-network notes
456spell out which), and the brand-id is selected per call rather than
457baked into the credential. Every brand-side adapter is read-only at
458v0.1 — the client refuses any non-GET HTTP method before it leaves
459your machine. The full editorial position, including known upstream
460quirks and the read-only stance, lives in [`REPORT.md`](./REPORT.md).
461 
462## Contribute in 10 minutes
463 
464A first PR shouldn't take longer than an evening. The path:
465 
4661. **Pick an issue.** Browse the
467 [`good-first-pr`](https://github.com/bobberrisford/affiliatemcp/issues?q=is%3Aissue+is%3Aopen+label%3Agood-first-pr)
468 queue. Each has a file path, acceptance bullets, and a how-to-test
469 line. Comment to claim it.
4702. **Get to green.** One command runs the full pre-PR check —
471 typecheck, lint, tests, build — in a few seconds:
472 
473 ```
474 git clone https://github.com/bobberrisford/affiliatemcp.git
475 cd affiliatemcp
476 npm install
477 npm run verify
478 ```
479 
480 If `npm run verify` passes locally, CI will pass.
4813. **Open the PR.** Use the default template (a short summary + test
482 plan). First review within 24h on weekdays — see
483 [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the full PR process and
484 the four ranked help-wanted areas.
485 
486If you work for an affiliate network, the highest-leverage contribution
487is adopting your own adapter — see the
488[`adopt-this-network`](https://github.com/bobberrisford/affiliatemcp/issues?q=is%3Aissue+is%3Aopen+label%3Aadopt-this-network)
489issues.
490 
491## Wanted
492 
493Networks people have asked for but that don't have an adapter yet. If
494you work for one of these — or just have API access and want to
495contribute — this is the most useful place to start. See
496[`CONTRIBUTING.md`](./CONTRIBUTING.md) for the workflow, and open (or
497pile onto) a tracking issue before you start.
498 
499<!-- AFFILIATE_MCP_WANTED_TABLE_START -->
500| Network | Side wanted | Notes | Tracking issue |
501| --- | --- | --- | --- |
502<!-- AFFILIATE_MCP_WANTED_TABLE_END -->
503 
504## Awin reference implementation
505 
506Awin is the current reference slice for the repo's future shape. It keeps the
507seven canonical publisher tools and adds Awin-specific tools for accounts,
508programme details, commission groups, transaction-by-ID lookup, transaction
509queries, advertiser/creative/campaign reports, Link Builder, Offers, and safe
510stubs for gated Product Feed and Proof of Purchase APIs.
511 
512Start here if you want to understand the product direction:
513 
514- [AI-native affiliate data rationale](./docs/product/ai-native-affiliate-data.md)
515- [Awin public API inventory](./docs/networks/awin/api-inventory.md)
516- [Awin setup and live validation notes](./docs/networks/awin.md)
517 
518## Where your credentials live
519 
520When you run the setup wizard it writes a single file at
521`~/.affiliate-mcp/.env` on your machine, locked to your user account
522(file mode `0600`). That's the only place your API keys exist outside the
523network dashboards. Both publisher and brand-side credentials live here, each
524keyed by network slug; open, edit, delete, or copy it like any other file.
525 
526If you registered any brand-side networks, the wizard also writes
527`~/.affiliate-mcp/brands.json` next to it, mapping your local nickname for each
528brand (e.g. `acme`) to the network's brand id on every network the brand is
529bound to (empty for the publisher-only path).
530 
531That local path stays free and complete; an opt-in [hosted tier](https://agenticaffiliate.ai/hosted.html) is live for four networks.
532 
533## Managing brands
534 
535The brand-side flow adds one concept: a local **brand slug**. You give each
536client (or each of your own brands) a short nickname; the tool maps it to the
537network's own brand id on every network the brand is registered on. A real
538`brands.json` looks like this:
539 
540```json
541{
542 "version": 1,
543 "brands": {
544 "acme": [
545 { "network": "impact-advertiser", "credentialId": "default", "networkBrandId": "IA-12345" },
546 { "network": "cj-advertiser", "credentialId": "default", "networkBrandId": "7654321" }
547 ]
548 }
549}
550```
551 
552The same logical brand can appear under multiple networks; that's how
553*"earnings for Acme across all networks"* fans out across the right brand id on
554each one. You can hand-edit this file to rename, remove, or add brands, or re-run
555`npx affiliate-networks-mcp setup` to register new ones interactively (the wizard
556skips brands already in the file).
557 
558Three skills are tuned for the brand side:
559[`programme-performance-report`](./skills/programme-performance-report/SKILL.md)
560(single-brand, per-publisher rollup),
561[`agency-portfolio-rollup`](./skills/agency-portfolio-rollup/SKILL.md)
562(every brand × network, brand-aggregated), and
563[`programme-anomaly-watch`](./skills/programme-anomaly-watch/SKILL.md)
564(scheduled week-over-week anomaly scan).
565 
566## Use it from the terminal
567 
568`call` runs the same registered operations as the MCP server, for quick checks,
569scripts, and CI (`call --help` for full usage). Some calls contact an upstream
570network (for example `generate_tracking_link` mints a link). Schema-aware
571`key=value` parsing keeps string ids, converts numbers, and takes comma-separated
572or JSON arrays; `--args '<json>'` passes a full object. Results are JSON on
573stdout; failures are `NetworkErrorEnvelope` JSON on stderr with a non-zero exit.
574 
575```bash
576npx affiliate-networks-mcp call --list [--network awin]
577npx affiliate-networks-mcp call --describe awin list_transactions
578npx affiliate-networks-mcp call awin list_transactions from=2026-01-01 limit=50
579```
580 
581## When something goes wrong
582 
583```
584npx affiliate-networks-mcp doctor
585```
586 
587That runs a live diagnostic across every configured network and tells
588you, in English, what's broken and how to fix it. If a specific
589network is misbehaving, append its slug:
590 
591```
592npx affiliate-networks-mcp doctor rakuten
593```
594 
595Most failures are one of three things: an expired token, a network
596that needs your approval re-confirmed, or a credential typed with a trailing
597space. The JSON also reports `clientStrategies` health; it never deletes them.
598 
599## Per-network setup notes
600 
601Each network has a short page covering dashboard navigation, where to
602click for credentials, and common stumbling blocks:
603 
604**Publisher side:**
605 
606- [Awin](./docs/networks/awin.md) — API token + publisher ID.
607- [CJ Affiliate](./docs/networks/cj.md) — Developer Key (GraphQL).
608- [eBay Partner Network](./docs/networks/ebay.md) — OAuth client + secret + campaign ID; approval required.
609- [Everflow](./docs/networks/everflow.md) — API key (admin-issued); experimental, built from public docs.
610- [Impact](./docs/networks/impact.md) — Account SID + Auth Token.
611- [mrge](./docs/networks/mrge.md) — API key + secret + site ID; experimental, built from public docs.
612- [Partnerize](./docs/networks/partnerize.md) — application key + user API key; experimental, built from public docs.
613- [PartnerStack](./docs/networks/partnerstack.md) — Partner API key; experimental, built from public docs.
614- [Rakuten Advertising](./docs/networks/rakuten.md) — OAuth client + SID; approval required.
615- [Skimlinks](./docs/networks/skimlinks.md) — OAuth client ID + secret + publisher ID + domain ID; experimental, built from public docs.
616- [Sovrn Commerce](./docs/networks/sovrn-commerce.md) — API key + secret key; experimental, built from public docs.
617- [Tradedoubler](./docs/networks/tradedoubler.md) — bearer token + organisation ID; experimental, built from public docs.
618- [Admitad](./docs/networks/admitad.md) — OAuth2 client ID + secret + website ID; experimental, built from public docs.
619- [Adservice](./docs/networks/adservice.md) — UID + login token (cookie session); experimental, built from public docs.
620- [Adtraction](./docs/networks/adtraction.md) — API token; experimental, built from public docs.
621- [Afilio](./docs/networks/afilio.md) — affiliate token + Aff ID; experimental, built from public docs.
622- [Commission Factory](./docs/networks/commission-factory.md) — API key; experimental, built from public docs.
623- [Coupang Partners](./docs/networks/coupang-partners.md) — access key + secret key (HMAC); experimental, built from public docs.
624- [Daisycon](./docs/networks/daisycon.md) — OAuth2 client ID + secret + refresh token + publisher ID; experimental, built from public docs.
625- [Eduzz](./docs/networks/eduzz.md) — email + public key + API key; experimental, built from public docs.
626- [FlexOffers](./docs/networks/flexoffers.md) — API key; experimental, built from public docs.
627- [Hotmart](./docs/networks/hotmart.md) — OAuth2 client ID + secret; experimental, built from public docs.
628- [Indoleads](./docs/networks/indoleads.md) — bearer token; experimental, built from public docs.
629- [Kwanko](./docs/networks/kwanko.md) — API token; experimental, built from public docs.
630- [Lomadee](./docs/networks/lomadee.md) — app token + source ID + publisher ID + report login; experimental, built from public docs.
631- [Monetizze](./docs/networks/monetizze.md) — API key; experimental, built from public docs.
632- [ValueCommerce](./docs/networks/value-commerce.md) — report-API key pair; experimental, built from public docs.
633- [Webgains](./docs/networks/webgains.md) — API key + publisher ID + campaign ID; experimental, built from public docs.
634- [Affise](./docs/networks/affise.md) — per-tenant base URL + API-Key header; tenant CPA engine; experimental, built from public docs.
635- [Scaleo](./docs/networks/scaleo.md) — per-tenant base URL + API key (query param); tenant engine; experimental, built from public docs.
636- [Offer18](./docs/networks/offer18.md) — per-tenant base URL + key/aid/mid (query params); tenant engine; experimental, built from public docs.
637- [CAKE](./docs/networks/cake.md) — per-instance base URL + API key + affiliate ID (XML API); experimental, built from public docs.
638- [NetRefer](./docs/networks/netrefer.md) — per-operator base URL + OAuth2 (Azure AD); iGaming ASR reporting; experimental, built from public docs.
639- [Affilae](./docs/networks/affilae.md) — Bearer token; single-brand; FR network; experimental, built from public docs.
640- [Optimise Media](./docs/networks/optimise-media.md) — apikey header (Service Account); UK/IN/APAC; experimental, built from public docs.
641- [AccessTrade](./docs/networks/accesstrade.md) — Token header + site ID; SE-Asia/Japan, per-country base URL; experimental, built from public docs.
642- [Travelpayouts](./docs/networks/travelpayouts.md) — X-Access-Token; global travel; experimental, built from public docs.
643- [Flipkart Affiliate](./docs/networks/flipkart.md) — affiliate ID + token headers; India; experimental, built from public docs.
644- [Adrecord](./docs/networks/adrecord.md) — APIKEY header; Nordic; experimental, built from public docs.
645- [Addrevenue](./docs/networks/addrevenue.md) — Bearer token + channel ID; Nordic; experimental, built from public docs.
646- [ShareASale](./docs/networks/shareasale.md) — affiliate ID + token + secret (signed); US; experimental, built from public docs.
647- [Pepperjam](./docs/networks/pepperjam.md) — apiKey query param; US (Ascend, distinct from Partnerize); experimental, built from public docs.
648- [AvantLink](./docs/networks/avantlink.md) — affiliate ID + auth key + website ID (query params); US/outdoor; experimental, built from public docs.
649- [Digistore24](./docs/networks/digistore24.md) — X-DS-API-KEY header; DE digital products; experimental, built from public docs.
650- [ClickBank](./docs/networks/clickbank.md) — DEV:CLERK key header + nickname; digital products; experimental, built from public docs.
651- [TUNE](./docs/networks/tune.md) — NetworkId + api_key (per-tenant host); HasOffers engine; experimental, built from public docs.
652- [Involve Asia](./docs/networks/involve-asia.md) — key + secret (token exchange); APAC; experimental, built from public docs.
653- [TradeTracker](./docs/networks/tradetracker.md) — customer ID + passphrase + site ID (SOAP session); NL/EU; experimental, built from public docs.
654- [Amazon Creators](./docs/networks/amazon-creators.md) — API key + partner tag; single programme per marketplace; experimental, built from public docs.
655- [Belboon](./docs/networks/belboon.md) — magic key + user ID (CSV export); DACH; experimental, built from public docs.
656- [financeAds](./docs/networks/financeads.md) — API key + publisher ID; DACH finance; experimental, built from public docs.
657- [Adcell](./docs/networks/adcell.md) — API key + affiliate ID; DACH; experimental, built from public docs.
658- [ShopMy](./docs/networks/shopmy.md) — Brand Partner token; US creator network; experimental, built from public docs.
659- [Levanta](./docs/networks/levanta.md) — Bearer token; Amazon creator platform; experimental, built from public docs.
660- [Howl](./docs/networks/howl.md) — NRTV-API-KEY header + publisher ID; creator link network; smart-link minting; experimental, built from public docs.
661- [Yieldkit](./docs/networks/yieldkit.md) — api_key + secret (query params); link monetisation; clicks supported; experimental, built from public docs.
662- [eHUB](./docs/networks/ehub.md) — apiKey query param + publisher ID; CZ/CEE; clicks supported; experimental, built from public docs.
663- [LinkConnector](./docs/networks/linkconnector.md) — API key (query param); US; experimental, built from public docs.
664- [Connexity](./docs/networks/connexity.md) — publisher ID + API key; US CPC-commerce (distinct from Skimlinks); experimental, built from public docs.
665- [Affiliate Future](./docs/networks/affiliate-future.md) — API key + password (query params); UK; 1-day pull window; experimental, built from public docs.
666- [Effiliation](./docs/networks/effiliation.md) — API key (query param); FR; experimental, built from public docs.
667- [2Performant](./docs/networks/2performant.md) — email + password (session login); Romania; experimental, built from public docs.
668- [Profitshare](./docs/networks/profitshare.md) — API user + key (HMAC-signed); Romania; experimental, built from public docs.
669 
670**Brand / advertiser side:**
671 
672- [Awin (advertiser)](./docs/networks/awin-advertiser.md) — OAuth bearer token; multi-brand via `GET /accounts`; gated to Accelerate / Advanced plans; read-only.
673- [CJ Affiliate (advertiser)](./docs/networks/cj-advertiser.md) — Personal Access Token (GraphQL); multi-brand via CID list; read-only.
674- [Everflow (advertiser)](./docs/networks/everflow-advertiser.md) — API key (admin-issued); multi-brand; experimental, built from public docs.
675- [Impact (advertiser)](./docs/networks/impact-advertiser.md) — Account SID + Auth Token; agency or brand-direct; read-only.
676- [Partnerize (advertiser)](./docs/networks/partnerize-advertiser.md) — application key + user API key; multi-brand; experimental, built from public docs.
677- [PartnerStack (advertiser)](./docs/networks/partnerstack-advertiser.md) — public + secret key pair (Vendor API); single-brand; experimental, built from public docs.
678- [Tradedoubler (advertiser)](./docs/networks/tradedoubler-advertiser.md) — reports token + organisation ID; multi-brand; experimental, built from public docs.
679- [Admitad (advertiser)](./docs/networks/admitad-advertiser.md) — OAuth2 client ID + secret + advertiser ID; multi-brand; read-only; experimental, built from public docs.
680- [Adtraction (advertiser)](./docs/networks/adtraction-advertiser.md) — API token; multi-brand; read-only (POST-read allowlist); experimental, built from public docs.
681- [Commission Factory (advertiser)](./docs/networks/commission-factory-advertiser.md) — API key; read-only; experimental, built from public docs.
682- [Daisycon (advertiser)](./docs/networks/daisycon-advertiser.md) — OAuth2 client ID + secret + refresh token; multi-brand; read-only; experimental, built from public docs.
683- [Kwanko (advertiser)](./docs/networks/kwanko-advertiser.md) — API token; multi-brand; read-only; experimental, built from public docs.
684- [ValueCommerce (advertiser)](./docs/networks/value-commerce-advertiser.md) — report-API key pair; multi-brand; read-only; experimental, built from public docs.
685- [Webgains (advertiser)](./docs/networks/webgains-advertiser.md) — API key + account ID; multi-brand; read-only; experimental, built from public docs.
686- [Rewardful](./docs/networks/rewardful.md) — API Secret (HTTP Basic); single-brand; Stripe-native SaaS; experimental, built from public docs.
687- [FirstPromoter](./docs/networks/firstpromoter.md) — API key + account ID (Bearer); single-brand; SaaS-referral; experimental, built from public docs.
688- [Partnero](./docs/networks/partnero.md) — API token (Bearer); single-brand; SaaS-referral; experimental, built from public docs.
689- [GrowSurf](./docs/networks/growsurf.md) — API key + campaign ID (Bearer); single-brand; referral-credit SaaS; experimental, built from public docs.
690- [LeadDyno](./docs/networks/leaddyno.md) — private key (query param); single-brand; SaaS-referral; experimental, built from public docs.
691- [Post Affiliate Pro](./docs/networks/post-affiliate-pro.md) — per-tenant base URL + API key (Bearer); single-brand; SaaS engine; experimental, built from public docs.
692- [Tolt](./docs/networks/tolt.md) — Bearer key; single-brand; SaaS-referral; experimental, built from public docs.
693- [Refersion](./docs/networks/refersion.md) — public + secret key headers; single-brand; Shopify-heavy SaaS; experimental, built from public docs.
694- [Tapfiliate](./docs/networks/tapfiliate.md) — X-Api-Key header; single-brand; SaaS-referral; experimental, built from public docs.
695 
696## For the curious (or technical)
697 
698`affiliate-mcp` has five practical layers. **Adapters** under `src/networks/`
699handle each network's auth, API quirks, normalisation, and capability metadata.
700**MCP tools** expose typed operations such as `affiliate_awin_list_transactions`;
701six meta-tools cover listing, diagnostics, brand resolution, and advisory client
702strategy. **Skills and workflows** compose tools into affiliate jobs. **MCP
703prompts** are reusable templates and currently Awin-specific. **Setup paths**
704connect the same local server to Claude Desktop, Claude Code, Codex, Cowork, or
705another compatible local stdio MCP client.
706 
707The packaged skills under [`skills/`](./skills) are the conversation patterns
708Claude follows for common requests. Publisher side:
709[`affiliate-earnings-report`](./skills/affiliate-earnings-report/SKILL.md),
710[`affiliate-network-status`](./skills/affiliate-network-status/SKILL.md),
711[`affiliate-network-setup-help`](./skills/affiliate-network-setup-help/SKILL.md),
712[`audit-affiliate-links`](./skills/audit-affiliate-links/SKILL.md). Brand side:
713[`programme-performance-report`](./skills/programme-performance-report/SKILL.md),
714[`agency-portfolio-rollup`](./skills/agency-portfolio-rollup/SKILL.md),
715[`programme-anomaly-watch`](./skills/programme-anomaly-watch/SKILL.md).
716 
717For per-network capability detail, known upstream quirks, and the
718editorial baseline used when accepting new network claims, see
719[`REPORT.md`](./REPORT.md). It is regenerated from each adapter's
720`network.json` on every merge, so it stays in step with the code.
721 
722## Repository layout
723 
724If you're poking around the source, the top-level folders are:
725 
726- [`src/`](./src) — the MCP server. Entry point `index.ts`; one folder
727 per network under [`src/networks/`](./src/networks) (publisher
728 adapters at `<slug>/`, advertiser adapters at `<slug>-advertiser/`);
729 shared primitives under [`src/shared/`](./src/shared); bundled
730 Claude skills under [`skills/`](./skills).
731- [`docs/networks/`](./docs/networks) — per-network setup walkthroughs
732 (dashboard navigation, credentials, common failures), publisher and
733 advertiser side.
734- [`docs/README.md`](./docs/README.md) — documentation map, authority order,
735 and review rules.
736- [`templates/new-network/`](./templates/new-network) — scaffold to
737 copy when adding a new network adapter.
738- [`scripts/`](./scripts) — generators and validators
739 (`validate:network`, `generate:readme`, `generate:report`).
740- [`tests/`](./tests) — vitest suite. No live API calls; everything
741 runs against verbatim fixtures.
742- [`examples/`](./examples) — Claude Desktop config snippet.
743 
744## Adding a network
745 
746**If you work for an affiliate network**, the canonical path is in
747[`CONTRIBUTING.md`](./CONTRIBUTING.md) under "Adopting your network".
748You can take ownership via `.github/CODEOWNERS`, verify the adapter with live
749evidence, and cover whichever sides your API exposes. Adoption does not
750automatically grant `production`; promotion follows the same evidence,
751freshness, and maintainer-review gates as every adapter.
752 
753If your favourite network isn't in the table and you don't work for
754it, you can add it anyway — and you don't necessarily need to be a
755developer to do it. Open this repo in Claude Code and say *"add
756[network name] to affiliate-mcp"*. The `contribute` skill kicks in
757and walks the whole process: it asks early which side you're adding
758(publisher, brand-side, or both), picks the right scaffold and
759credential-scope conventions, researches the network's API, writes
760the tests, drafts the docs. You're the editor; Claude does the
761typing.
762 
763If you'd rather drive it yourself, [`CONTRIBUTING.md`](./CONTRIBUTING.md)
764is the human-side workflow, [`AGENTS.md`](./AGENTS.md) is the primer
765for AI coding agents, and [`templates/new-network/`](./templates/new-network/)
766is the scaffold to copy. Networks people most often ask for are
767tracked in GitHub Issues under the `good first issue` label.
768 
769Local development:
770 
771```
772npm install
773npm test
774npm run typecheck
775npm run lint
776npm run build
777```
778 
779## Status
780 
781Beta — available now. The repository contains 86 adapters across 72 network
782families: 63 publisher-side and 23 advertiser-side. Support varies by adapter;
783check the generated network table and [`REPORT.md`](./REPORT.md) for each
784adapter's declared operations, claim status, and known limitations. Adapters
785remain `partial` or `experimental` until their behaviour is confirmed against
786real publisher, agency, or in-house brand accounts.
787 
788## Licence
789 
790MIT. See [`LICENCE`](./LICENCE).
791 
792## Acknowledgements
793 
794This project is only possible because the engineering teams at Awin,
795CJ Affiliate, eBay Partner Network, Impact, and Rakuten Advertising
796publish public, documented APIs — both the publisher endpoints and
797(for Awin, CJ, and Impact) the brand-side advertiser endpoints. These
798adapters read those APIs directly. Where a network has no usable API,
799an adapter may instead drive the user's own dashboard session (browser-driven).
800 

Discussion

Alternatives

Affiliate marketingWhen the user wants to plan, implement, or optimize affiliate marketing strategy. Also use when the user mentions "affiliate marketing," "affiliate program strategy," "CPS model," "affiliate recruitment," "commission structure," "affiliate partners," "affiliate network," "affiliate tracking," "affiliate commission," or "partner marketing." For affiliate page, use affiliate-page-generator.Marketing · MITAffiliate marketingBuild and manage an affiliate marketing program. Use when the user says "affiliate program", "affiliate marketing", "affiliate partners", "referral commissions", "affiliate network", "partner program", "affiliate tracking", or asks about creating, managing, or growing an affiliate or partner program.Marketing · MITAffiliate Program ListerResearch an affiliate program and create a verified listing for openaffiliate.dev. Use this skill when the user asks anything about listing a program, adding an affiliate program to the directory, submitting a program to list, creating a listing, documenting an affiliate program, sharing an affiliate program, writing a program profile, posting a program to openaffiliate.dev, or contributing a new program. Also trigger for: "list a program", "add affiliate program", "submit program to list", create listing for X", "document affiliate program", "share affiliate program", write a listing", "post to openaffiliate.dev", "add X to the directory", register an affiliate program", "publish affiliate program", "new program listing", profile this affiliate program", "catalog this program".Marketing · MITReferral & Affiliate ProgramsWhen the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy. Also use when the user mentions 'referral,' 'affiliate,' 'ambassador,' 'word of mouth,' 'viral loop,' 'refer a friend,' 'partner program,' 'referral incentive,' 'how to get referrals,' 'customers referring customers,' or 'affiliate payout.' Use this whenever someone wants existing users or partners to bring in new customers. For launch-specific virality, see launch.Marketing · MIT