{
  "markdown": "# affiliate-mcp\n\n> Integrate your affiliate networks with Claude or Codex.\n\n[![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)\n\n> **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.\n\nAffiliate networks have two sides — and neither has a first-class AI workspace integration.\n\n**Publishers** earn commissions from the programmes they join.\n**Brands** (and the agencies who manage them) run those programmes\nand pay the commissions out. I wanted to chat to my own affiliate\ndata in the AI workspace I already use; none of the networks had shipped an\nintegration for either side, so I built a broad beta set that covers both\npublisher and advertiser-side work.\n\nIf you're a **publisher**, you can ask:\n\n> *\"What did I earn across all networks last month?\"*\n>\n> *\"Which programmes have transactions still pending after 90 days?\"*\n>\n> *\"Compare my earnings month on month.\"*\n\nIf you're on the **brand side** — running a programme, or an agency\nmanaging several — you can ask:\n\n> *\"How is Acme's programme doing this quarter?\"*\n>\n> *\"Show me revenue across all my clients this week.\"*\n>\n> *\"Any anomalies in the affiliate data?\"*\n\nYour AI workspace figures out which networks to call, fetches the data live from\ntheir APIs, and gives you the answer. You can use Claude or Codex to turn it\ninto a sheet, an artifact, an email to your boss, whatever you want.\n\nFree and open source. MIT licensed. Bring your own keys. For the product\nphilosophy, read the [AI-native affiliate data manifesto](./docs/product/manifesto.md).\n\n## Who this is for\n\nThis tool serves two audiences. Pick the one that fits — or both, if\nyou wear both hats.\n\n**You're a publisher.** You earn commissions from affiliate\nprogrammes, your dashboards can't keep up with how fast you can think,\nand you want one conversation that spans every network you're on.\n\n**You're on the brand side.** You run an affiliate programme — or\nyou're an agency managing several brands' programmes. You want one\nquestion that fans out across networks and brands, and surfaces what\nthe dashboards bury: publishers trending down, reversal spikes, dead\nlinks, programmes drifting toward zero.\n\nEither way, you do **not** need to know what an API is or write code. The\nnon-technical Claude Desktop track needs:\n\n- Your existing logins to the affiliate networks you already work with.\n- Claude Desktop installed.\n\nThe technical track uses a terminal, Node.js 20 or newer, and Claude Desktop,\nClaude Code, Codex, or another compatible local stdio MCP client; check the support states below before relying on an untested client journey.\n\n**And if you work for an affiliate network**, this is also for you. The\nbundled adapters are placeholders until each network adopts its own. See\n[`CONTRIBUTING.md`](./CONTRIBUTING.md) under \"Adopting your network\".\n\n## Why bother?\n\n**One question, every network and every brand.** \"Show me earnings by\nprogramme\" hits your configured publisher networks in parallel. On the brand\nside, \"show me revenue across all my clients this week\" fans out across every\nbrand and network pair you've registered.\n\n**Plain English, not filters.** No more clicking through date pickers and saved\nviews. \"Last quarter, status pending, sorted by amount\" is the whole prompt.\n\n**Your data, your machine, by default.** It runs locally. Your keys live in\n`~/.affiliate-mcp/.env`, locked to your user account. Optional anonymous\nusage telemetry is off by default and never contains affiliate data,\ncredentials, prompts, arguments, results, or error text. The networks see\nthe same API calls they'd see from their dashboard.\n\n**Catches what dashboards bury.** Stale transactions, inactive programmes, dead\ndeeplinks and week-on-week drops are surfaced by the packaged skills.\n\n**Optional local result cache.** Persistent caching is off by default. Set\n`AFFILIATE_MCP_CACHE=on` in `~/.affiliate-mcp/.env` to cache selected programme\ninventory and closed reporting windows locally with owner-only permissions.\nOpen and current windows always go live. On a shared machine where you cannot\nrely on file permissions, leave caching off. Run\n`affiliate-networks-mcp cache clear` to remove cached results; see\n[`PRIVACY.md`](./PRIVACY.md) for the storage and retention contract.\n\n## Getting started\n\nChoose one of two primary tracks. Both run the same local MCP server and keep your credentials on your machine.\n\n### Track 1: non-technical, Claude Desktop\n\nUse the host-native Claude Desktop `.mcpb`. No Terminal, Node.js, or manual\nconfiguration is required.\n\n1. Download `affiliate-networks-mcp-<version>.mcpb` from the latest\n   [GitHub release](https://github.com/bobberrisford/affiliatemcp/releases/latest).\n2. In Claude Desktop, open **Settings → Extensions → Advanced settings →\n   Install Extension…** and select the downloaded file.\n3. Add credentials for the networks you use, then ask Claude\n   **\"What affiliate networks do you have access to?\"**\n\nThe 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)).\nThe native extension currently offers secure setup fields for Awin, CJ, Impact,\nand Partnerize. It runs the complete server, so an existing\n`~/.affiliate-mcp/.env` continues to enable every other adapter. A portable\nbrowser setup flow for the remaining networks is planned; until then, use the\ntechnical track below when adding them.\n\nThe standalone Electron/DMG setup app is a **fixes-only compatibility\nfallback** for existing macOS users. It is not a third primary onboarding\ntrack. See [`desktop/README.md`](./desktop/README.md) for its remaining use\ncase.\n\n### Track 2: technical and semi-technical, CLI plus local stdio\n\nYou'll need Node.js 20 or newer installed. If you don't have it, use the\n[Node.js download page](https://nodejs.org/).\n\n**1. Run the setup wizard.** Open Terminal (macOS) or PowerShell (Windows):\n\n```\nnpx affiliate-networks-mcp setup\n```\n\nIt walks you through one network at a time, asks which **side** you want,\nshows where to find each credential, then checks it against the live network.\n\nFor brand-side networks, the wizard asks which brands those credentials can\nreach, then lets you pick local nicknames. The mapping is saved to\n`~/.affiliate-mcp/brands.json`, see [Managing brands](#managing-brands).\n\n**2. Check everything is wired up.**\n\n```\nnpx affiliate-networks-mcp test\n```\n\nYou should see one line per network: `ok` for everything that's healthy,\n`error — <reason>` for anything that isn't.\n\n**3. Connect it to your local MCP client.** Use a host-native package, the CLI\ninstaller, or local stdio configuration. The setup wizard offers the shipped\nCLI installer targets at the end automatically.\n\n**Claude Desktop (Mac/Windows app):**\n\n```\nnpx affiliate-networks-mcp install\n```\n\nFinds your Claude Desktop config, adds the `affiliate` entry alongside\nanything else you already have, takes a timestamped backup first. Restart\nClaude Desktop after it finishes. Flags: `--desktop` / `--code` / `--codex`\nto pick one, `--all` to include Codex and skip prompting, `--dry-run` to\npreview, `--force-overwrite` if\nyour existing config is malformed JSON.\n\n**Claude Code (terminal):**\n\n```\nclaude plugin marketplace add bobberrisford/affiliatemcp\nclaude plugin install affiliate-networks-mcp@affiliatemcp\n```\n\nRegisters the MCP server and bundled skills in one step. (Or use the\n`install` command above — it detects Claude Code too.) Already inside a\nClaude Code session? Just ask it to install the affiliate-mcp plugin and it\nruns these commands for you; no terminal juggling needed.\n\n**Codex (OpenAI, terminal or IDE extension):**\n\n```\nnpx affiliate-networks-mcp install --codex\n```\n\nThis adds the local stdio MCP server to `~/.codex/config.toml`; the same MCP\nconfig is used by the Codex CLI and Codex IDE extension. Manual setup:\n\n```\ncodex mcp add affiliate -- npx -y affiliate-networks-mcp\n```\n\nVerify: open Codex, run `/mcp`, then ask **\"What affiliate networks do you\nhave access to?\"** This is OpenAI/Codex support, not ChatGPT connector\nsupport. ChatGPT requires a reachable HTTPS MCP server and is scoped separately.\n\n**Claude Cowork desktop (org accounts):**\n\nCowork syncs plugins from a GitHub repo, but blocks **public** repos from org\nmarketplaces — so you need a **private mirror** first. The setup wizard offers\nthis at the end, or run `install` and pick Cowork:\n\n```\nnpx affiliate-networks-mcp install      # detects your clients, offers Cowork\n```\n\n(Or go straight to it: `npx affiliate-networks-mcp cowork-mirror`.)\n\nIt creates `<you>/affiliatemcp-internal` as a private repo and mirrors the\nupstream into it. If you have the GitHub CLI (`gh`) signed in, it's used\nautomatically; otherwise it tells you exactly where to get a GitHub token and\nprompts you to paste it — the same \"paste a credential\" flow as setting up a\nnetwork. Re-run with `--sync` to refresh against new releases.\n\nThen, with **org-admin** access, in Cowork: **Organization settings → Plugins\n→ Add plugin → GitHub** → enter `<you>/affiliatemcp-internal` → install\n`affiliate-networks-mcp` from the synced marketplace.\n\n<details>\n<summary>Prefer to edit Claude Desktop config by hand?</summary>\n\nOpen the Claude Desktop config file at:\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\nAdd the `affiliate` entry inside `mcpServers` — keep any siblings:\n\n```json\n{\n  \"mcpServers\": {\n    \"affiliate\": {\n      \"command\": \"npx\",\n      \"args\": [\"affiliate-networks-mcp\"]\n    }\n  }\n}\n```\n\nRestart Claude Desktop after saving.\n\n</details>\n\nFor another local stdio MCP client, configure the server command\n`npx -y affiliate-networks-mcp`. These clients are compatible in principle,\nnot yet tested first-party journeys. Draft PR\n[#49](https://github.com/bobberrisford/affiliatemcp/pull/49) is the existing\nVS Code/Copilot installer candidate.\n\n### Client support states\n\nThese labels describe the onboarding journey, not whether every network adapter\nis live-verified. \"Tested\" means repository-owned automated validation, not live\nproof against every host version. See [`REPORT.md`](./REPORT.md) for maturity.\n\n| Client or path | Support state | What that means |\n| --- | --- | --- |\n| 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. |\n| Claude Desktop CLI/manual config | **Shipped and tested** | Technical local stdio path. Installer/config behaviour has automated coverage. |\n| Claude Code plugin and CLI registration | **Shipped and tested** | Technical path with packaged skills and local MCP registration. |\n| Codex CLI and IDE extension | **Shipped and tested** | Technical path using the shared local Codex MCP configuration. This is not ChatGPT connector support. |\n| 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). |\n| Claude Cowork private mirror | **Partially shipped** | Requires a private mirror and org-admin follow-through; it is not a simple individual setup path. |\n| 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). |\n| 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). |\n| 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. |\n\n**Check it worked.** In a new Claude conversation, ask **\"What affiliate\nnetworks do you have access to?\"** — you should see every network you\nconfigured. If you registered any brands, also try **\"list my brands\"**.\n\nTo disconnect later: `npx affiliate-networks-mcp uninstall`, or\n`claude plugin uninstall affiliate-networks-mcp` for the plugin path.\n\n## Anonymous telemetry\n\nThe project reads aggregate npm and GitHub adoption statistics. npm downloads\nare downloads, not users: they include repeated `npx` runs, CI, caches, and\nother automated traffic.\n\nOptional runtime telemetry is explicitly opt-in and sent at most once per\nactive day. It contains package version, launch surface, a random identifier\nthat rotates monthly, and counts by network, operation, and coarse outcome. See\nthe [privacy policy](./PRIVACY.md) for the exact contract.\n\n```sh\naffiliate-networks-mcp telemetry status\naffiliate-networks-mcp telemetry enable\naffiliate-networks-mcp telemetry disable\n```\n\n### Troubleshooting install\n\n**\"Unknown skill: plugin\" in a Claude session.** The `/plugin` syntax is a\nshell command, not a chat slash command. Run `claude plugin marketplace\nadd ...` from your terminal, not inside the conversation.\n\n**Cowork rejects the marketplace repo.** Confirm the repo is **private**.\nPublic repos are blocked for org-marketplace sync. Run `npx\naffiliate-networks-mcp cowork-mirror` to create a private mirror.\n\n**`What affiliate networks…` returns nothing.** The MCP server is loaded\nbut credentials are missing. Trigger the bundled\n[`affiliate-network-setup-help`](./skills/affiliate-network-setup-help/SKILL.md)\nskill (ask \"help me set up my affiliate network credentials\") or run\n`npx affiliate-networks-mcp setup` in a terminal.\n\n**Stale npm cache.** `npx --yes affiliate-networks-mcp@latest` forces a\nfresh fetch. Verify the published version with\n`npm view affiliate-networks-mcp version`.\n\n## What you can ask\n\nThe packaged skills are pre-written conversation patterns. You don't\nneed to invoke them — Claude picks the right one based on what you\ntype.\n\n### Publisher side\n\n- **\"What did I earn last month?\"** — consolidated earnings report\n  across every publisher network, split by status (pending, approved,\n  paid, reversed), with anything unpaid >90 days flagged.\n- **\"Are all my affiliate networks healthy?\"** — one-shot auth and\n  capability check.\n- **\"Help me set up Awin\"** *(or CJ, Impact, Rakuten)* — guided\n  credential setup with dashboard menu paths quoted verbatim.\n- **\"Audit the affiliate links in my sitemap at https://mysite.com/sitemap.xml\"**\n  — reads the sitemap, classifies every affiliate link by network,\n  and flags the dead or declined ones. URLs, HTML, or markdown also\n  accepted directly.\n\n### Brand side\n\n- **\"How is Acme performing this quarter?\"** — single-brand report\n  across that brand's bound networks. Top publishers, status splits,\n  period-over-period delta.\n- **\"Show me revenue across all my clients this week.\"** — portfolio\n  rollup, brand-aggregated, with a \"needs attention\" subsection for\n  brands trending down.\n- **\"Any anomalies in the affiliate data this week?\"** — week-over-week\n  scan for revenue drops, reversal spikes, top-10 dropouts, dead\n  programmes. Designed to run on a schedule via Claude's own scheduling.\n- **\"Set up Acme's strategy and KPIs\"** — bind the brand during setup, record\n  advisory context with `client-onboarding`, then reports, anomaly watches, and\n  portfolio rollups use it to frame verdicts. It never authorises a network\n  write or changes the figures.\n\n## Networks\n\nThe repository currently ships 86 adapters across 72 network families. The\nbreadth is real, but maturity varies; most adapters are `experimental`. Check\nthe table below and [`REPORT.md`](./REPORT.md) before relying on one for\nproduction work.\n\n<!-- AFFILIATE_MCP_NETWORK_TABLE_START -->\n| Network | Setup time | Approval required | Supported ops | Notes |\n| --- | ---: | --- | ---: | --- |\n| 2Performant | 5 min | no | 6 / 7 | no clicks |\n| AccessTrade | 10 min | no | 6 / 7 | no clicks |\n| Adcell | 10 min | no | 6 / 7 | no clicks |\n| Addrevenue | 5 min | no | 7 / 7 | pagination quirks |\n| Admitad | 15 min | no | 6 / 7 | clicks gated |\n| Admitad (advertiser) | 12 min | no | 7 / 7 | see notes |\n| Adrecord | 5 min | no | 6 / 7 | no clicks |\n| Adservice | 10 min | no | 6 / 7 | no clicks |\n| Adtraction | 5 min | no | 6 / 7 | no clicks |\n| Adtraction (advertiser) | 6 min | no | 7 / 7 | see notes |\n| Affilae | 5 min | no | 6 / 7 | no clicks |\n| Affiliate Future | 5 min | no | 6 / 7 | no clicks |\n| Affise | 10 min | no | 7 / 7 | no clicks |\n| Afilio | 10 min | no | 6 / 7 | no clicks |\n| Amazon Creators | 10 min | yes (~1 days) | 6 / 7 | no clicks |\n| AvantLink | 10 min | no | 6 / 7 | no clicks |\n| Awin | 5 min | no | 6 / 7 | no clicks |\n| Awin (advertiser) | 6 min | no | 7 / 7 | see notes |\n| Belboon | 10 min | no | 6 / 7 | no clicks |\n| CAKE | 10 min | no | 6 / 7 | no clicks |\n| CJ Affiliate | 8 min | no | 6 / 7 | no clicks |\n| CJ Affiliate (advertiser) | 8 min | no | 7 / 7 | pagination quirks |\n| ClickBank | 10 min | no | 6 / 7 | no clicks |\n| Commission Factory | 10 min | no | 6 / 7 | clicks gated |\n| Commission Factory (advertiser) | 7 min | no | 7 / 7 | pagination quirks |\n| Connexity | 10 min | no | 6 / 7 | no clicks |\n| Coupang Partners | 10 min | no | 6 / 7 | no clicks |\n| Daisycon | 15 min | no | 6 / 7 | no clicks |\n| Daisycon (advertiser) | 15 min | no | 7 / 7 | see notes |\n| Digistore24 | 5 min | no | 6 / 7 | no clicks |\n| eBay Partner Network | 10 min | yes (~3 days) | 7 / 7 | see notes |\n| Eduzz | 10 min | no | 6 / 7 | no clicks |\n| Effiliation | 5 min | no | 6 / 7 | no clicks |\n| eHUB | 5 min | no | 7 / 7 | see notes |\n| Everflow | 10 min | yes (~1 days) | 7 / 7 | see notes |\n| Everflow (Advertiser) | 10 min | no | 7 / 7 | no clicks |\n| financeAds | 10 min | yes (~2 days) | 6 / 7 | no clicks |\n| FirstPromoter | 5 min | no | 6 / 7 | no clicks |\n| FlexOffers | 10 min | no | 6 / 7 | no clicks |\n| Flipkart Affiliate | 10 min | no | 6 / 7 | no clicks |\n| GrowSurf | 10 min | no | 6 / 7 | no clicks |\n| Hotmart | 10 min | no | 6 / 7 | no clicks |\n| Howl | 5 min | no | 6 / 7 | clicks gated |\n| Impact | 6 min | no | 7 / 7 | upstream variability |\n| Impact (advertiser) | 8 min | no | 7 / 7 | see notes |\n| Indoleads | 5 min | no | 6 / 7 | no clicks |\n| Involve Asia | 5 min | no | 6 / 7 | no clicks |\n| Kwanko | 10 min | no | 6 / 7 | no clicks |\n| Kwanko (advertiser) | 10 min | no | 6 / 7 | no clicks |\n| LeadDyno | 5 min | no | 6 / 7 | no clicks |\n| Levanta | 5 min | no | 6 / 7 | no clicks |\n| LinkConnector | 5 min | no | 6 / 7 | no clicks |\n| Lomadee | 15 min | no | 6 / 7 | no clicks |\n| Monetizze | 5 min | no | 6 / 7 | no clicks |\n| mrge | 10 min | no | 6 / 7 | no clicks |\n| NetRefer | 15 min | yes (~5 days) | 6 / 7 | no clicks |\n| Offer18 | 10 min | no | 6 / 7 | no clicks |\n| Optimise Media | 10 min | no | 6 / 7 | no clicks |\n| Partnerize | 10 min | no | 7 / 7 | no clicks |\n| Partnerize (Advertiser) | 5 min | no | 6 / 7 | no clicks |\n| Partnero | 5 min | no | 6 / 7 | no clicks |\n| PartnerStack | 5 min | no | 6 / 7 | no clicks |\n| PartnerStack (advertiser) | 6 min | no | 7 / 7 | no clicks |\n| Pepperjam | 5 min | no | 6 / 7 | no clicks |\n| Post Affiliate Pro | 5 min | no | 6 / 7 | no clicks |\n| Profitshare | 5 min | no | 6 / 7 | no clicks |\n| Rakuten Advertising | 12 min | yes (~5 days) | 6 / 7 | clicks gated |\n| Refersion | 5 min | no | 6 / 7 | no clicks |\n| Rewardful | 5 min | no | 6 / 7 | no clicks |\n| Scaleo | 10 min | yes (~1 days) | 7 / 7 | see notes |\n| ShareASale | 10 min | no | 6 / 7 | no clicks |\n| ShopMy | 10 min | no | 6 / 7 | no clicks |\n| Skimlinks | 10 min | no | 6 / 7 | no clicks |\n| Sovrn Commerce | 10 min | no | 6 / 7 | no clicks |\n| Tapfiliate | 5 min | no | 6 / 7 | no clicks |\n| Tolt | 5 min | no | 6 / 7 | no clicks |\n| Tradedoubler | 15 min | no | 6 / 7 | clicks gated |\n| Tradedoubler (Advertiser) | 10 min | no | 7 / 7 | no clicks |\n| TradeTracker | 10 min | no | 7 / 7 | see notes |\n| Travelpayouts | 5 min | no | 6 / 7 | no clicks |\n| TUNE | 10 min | no | 7 / 7 | no clicks |\n| ValueCommerce | 10 min | no | 6 / 7 | no clicks |\n| ValueCommerce (advertiser) | 10 min | no | 6 / 7 | no clicks |\n| Webgains | 10 min | no | 6 / 7 | no clicks |\n| Webgains (advertiser) | 10 min | no | 7 / 7 | see notes |\n| Yieldkit | 5 min | no | 7 / 7 | see notes |\n<!-- AFFILIATE_MCP_NETWORK_TABLE_END -->\n\nA few networks make you wait for approval (eBay, Rakuten) before they\nhand over API access. The setup wizard tells you exactly what to do\nin each case. \"Supported ops\" being less than 7/7 just means the\nnetwork itself doesn't expose that data to its users — not a missing\nfeature on our side.\n\nThe **(advertiser)** rows are the brand-side adapters. They use a\nseparate credential type from the publisher row (sometimes the same\nauth model with a different account behind it; the per-network notes\nspell out which), and the brand-id is selected per call rather than\nbaked into the credential. Every brand-side adapter is read-only at\nv0.1 — the client refuses any non-GET HTTP method before it leaves\nyour machine. The full editorial position, including known upstream\nquirks and the read-only stance, lives in [`REPORT.md`](./REPORT.md).\n\n## Contribute in 10 minutes\n\nA first PR shouldn't take longer than an evening. The path:\n\n1. **Pick an issue.** Browse the\n   [`good-first-pr`](https://github.com/bobberrisford/affiliatemcp/issues?q=is%3Aissue+is%3Aopen+label%3Agood-first-pr)\n   queue. Each has a file path, acceptance bullets, and a how-to-test\n   line. Comment to claim it.\n2. **Get to green.** One command runs the full pre-PR check —\n   typecheck, lint, tests, build — in a few seconds:\n\n   ```\n   git clone https://github.com/bobberrisford/affiliatemcp.git\n   cd affiliatemcp\n   npm install\n   npm run verify\n   ```\n\n   If `npm run verify` passes locally, CI will pass.\n3. **Open the PR.** Use the default template (a short summary + test\n   plan). First review within 24h on weekdays — see\n   [`CONTRIBUTING.md`](./CONTRIBUTING.md) for the full PR process and\n   the four ranked help-wanted areas.\n\nIf you work for an affiliate network, the highest-leverage contribution\nis adopting your own adapter — see the\n[`adopt-this-network`](https://github.com/bobberrisford/affiliatemcp/issues?q=is%3Aissue+is%3Aopen+label%3Aadopt-this-network)\nissues.\n\n## Wanted\n\nNetworks people have asked for but that don't have an adapter yet. If\nyou work for one of these — or just have API access and want to\ncontribute — this is the most useful place to start. See\n[`CONTRIBUTING.md`](./CONTRIBUTING.md) for the workflow, and open (or\npile onto) a tracking issue before you start.\n\n<!-- AFFILIATE_MCP_WANTED_TABLE_START -->\n| Network | Side wanted | Notes | Tracking issue |\n| --- | --- | --- | --- |\n<!-- AFFILIATE_MCP_WANTED_TABLE_END -->\n\n## Awin reference implementation\n\nAwin is the current reference slice for the repo's future shape. It keeps the\nseven canonical publisher tools and adds Awin-specific tools for accounts,\nprogramme details, commission groups, transaction-by-ID lookup, transaction\nqueries, advertiser/creative/campaign reports, Link Builder, Offers, and safe\nstubs for gated Product Feed and Proof of Purchase APIs.\n\nStart here if you want to understand the product direction:\n\n- [AI-native affiliate data rationale](./docs/product/ai-native-affiliate-data.md)\n- [Awin public API inventory](./docs/networks/awin/api-inventory.md)\n- [Awin setup and live validation notes](./docs/networks/awin.md)\n\n## Where your credentials live\n\nWhen you run the setup wizard it writes a single file at\n`~/.affiliate-mcp/.env` on your machine, locked to your user account\n(file mode `0600`). That's the only place your API keys exist outside the\nnetwork dashboards. Both publisher and brand-side credentials live here, each\nkeyed by network slug; open, edit, delete, or copy it like any other file.\n\nIf you registered any brand-side networks, the wizard also writes\n`~/.affiliate-mcp/brands.json` next to it, mapping your local nickname for each\nbrand (e.g. `acme`) to the network's brand id on every network the brand is\nbound to (empty for the publisher-only path).\n\nThat local path stays free and complete; an opt-in [hosted tier](https://agenticaffiliate.ai/hosted.html) is live for four networks.\n\n## Managing brands\n\nThe brand-side flow adds one concept: a local **brand slug**. You give each\nclient (or each of your own brands) a short nickname; the tool maps it to the\nnetwork's own brand id on every network the brand is registered on. A real\n`brands.json` looks like this:\n\n```json\n{\n  \"version\": 1,\n  \"brands\": {\n    \"acme\": [\n      { \"network\": \"impact-advertiser\", \"credentialId\": \"default\", \"networkBrandId\": \"IA-12345\" },\n      { \"network\": \"cj-advertiser\", \"credentialId\": \"default\", \"networkBrandId\": \"7654321\" }\n    ]\n  }\n}\n```\n\nThe same logical brand can appear under multiple networks; that's how\n*\"earnings for Acme across all networks\"* fans out across the right brand id on\neach one. You can hand-edit this file to rename, remove, or add brands, or re-run\n`npx affiliate-networks-mcp setup` to register new ones interactively (the wizard\nskips brands already in the file).\n\nThree skills are tuned for the brand side:\n[`programme-performance-report`](./skills/programme-performance-report/SKILL.md)\n(single-brand, per-publisher rollup),\n[`agency-portfolio-rollup`](./skills/agency-portfolio-rollup/SKILL.md)\n(every brand × network, brand-aggregated), and\n[`programme-anomaly-watch`](./skills/programme-anomaly-watch/SKILL.md)\n(scheduled week-over-week anomaly scan).\n\n## Use it from the terminal\n\n`call` runs the same registered operations as the MCP server, for quick checks,\nscripts, and CI (`call --help` for full usage). Some calls contact an upstream\nnetwork (for example `generate_tracking_link` mints a link). Schema-aware\n`key=value` parsing keeps string ids, converts numbers, and takes comma-separated\nor JSON arrays; `--args '<json>'` passes a full object. Results are JSON on\nstdout; failures are `NetworkErrorEnvelope` JSON on stderr with a non-zero exit.\n\n```bash\nnpx affiliate-networks-mcp call --list [--network awin]\nnpx affiliate-networks-mcp call --describe awin list_transactions\nnpx affiliate-networks-mcp call awin list_transactions from=2026-01-01 limit=50\n```\n\n## When something goes wrong\n\n```\nnpx affiliate-networks-mcp doctor\n```\n\nThat runs a live diagnostic across every configured network and tells\nyou, in English, what's broken and how to fix it. If a specific\nnetwork is misbehaving, append its slug:\n\n```\nnpx affiliate-networks-mcp doctor rakuten\n```\n\nMost failures are one of three things: an expired token, a network\nthat needs your approval re-confirmed, or a credential typed with a trailing\nspace. The JSON also reports `clientStrategies` health; it never deletes them.\n\n## Per-network setup notes\n\nEach network has a short page covering dashboard navigation, where to\nclick for credentials, and common stumbling blocks:\n\n**Publisher side:**\n\n- [Awin](./docs/networks/awin.md) — API token + publisher ID.\n- [CJ Affiliate](./docs/networks/cj.md) — Developer Key (GraphQL).\n- [eBay Partner Network](./docs/networks/ebay.md) — OAuth client + secret + campaign ID; approval required.\n- [Everflow](./docs/networks/everflow.md) — API key (admin-issued); experimental, built from public docs.\n- [Impact](./docs/networks/impact.md) — Account SID + Auth Token.\n- [mrge](./docs/networks/mrge.md) — API key + secret + site ID; experimental, built from public docs.\n- [Partnerize](./docs/networks/partnerize.md) — application key + user API key; experimental, built from public docs.\n- [PartnerStack](./docs/networks/partnerstack.md) — Partner API key; experimental, built from public docs.\n- [Rakuten Advertising](./docs/networks/rakuten.md) — OAuth client + SID; approval required.\n- [Skimlinks](./docs/networks/skimlinks.md) — OAuth client ID + secret + publisher ID + domain ID; experimental, built from public docs.\n- [Sovrn Commerce](./docs/networks/sovrn-commerce.md) — API key + secret key; experimental, built from public docs.\n- [Tradedoubler](./docs/networks/tradedoubler.md) — bearer token + organisation ID; experimental, built from public docs.\n- [Admitad](./docs/networks/admitad.md) — OAuth2 client ID + secret + website ID; experimental, built from public docs.\n- [Adservice](./docs/networks/adservice.md) — UID + login token (cookie session); experimental, built from public docs.\n- [Adtraction](./docs/networks/adtraction.md) — API token; experimental, built from public docs.\n- [Afilio](./docs/networks/afilio.md) — affiliate token + Aff ID; experimental, built from public docs.\n- [Commission Factory](./docs/networks/commission-factory.md) — API key; experimental, built from public docs.\n- [Coupang Partners](./docs/networks/coupang-partners.md) — access key + secret key (HMAC); experimental, built from public docs.\n- [Daisycon](./docs/networks/daisycon.md) — OAuth2 client ID + secret + refresh token + publisher ID; experimental, built from public docs.\n- [Eduzz](./docs/networks/eduzz.md) — email + public key + API key; experimental, built from public docs.\n- [FlexOffers](./docs/networks/flexoffers.md) — API key; experimental, built from public docs.\n- [Hotmart](./docs/networks/hotmart.md) — OAuth2 client ID + secret; experimental, built from public docs.\n- [Indoleads](./docs/networks/indoleads.md) — bearer token; experimental, built from public docs.\n- [Kwanko](./docs/networks/kwanko.md) — API token; experimental, built from public docs.\n- [Lomadee](./docs/networks/lomadee.md) — app token + source ID + publisher ID + report login; experimental, built from public docs.\n- [Monetizze](./docs/networks/monetizze.md) — API key; experimental, built from public docs.\n- [ValueCommerce](./docs/networks/value-commerce.md) — report-API key pair; experimental, built from public docs.\n- [Webgains](./docs/networks/webgains.md) — API key + publisher ID + campaign ID; experimental, built from public docs.\n- [Affise](./docs/networks/affise.md) — per-tenant base URL + API-Key header; tenant CPA engine; experimental, built from public docs.\n- [Scaleo](./docs/networks/scaleo.md) — per-tenant base URL + API key (query param); tenant engine; experimental, built from public docs.\n- [Offer18](./docs/networks/offer18.md) — per-tenant base URL + key/aid/mid (query params); tenant engine; experimental, built from public docs.\n- [CAKE](./docs/networks/cake.md) — per-instance base URL + API key + affiliate ID (XML API); experimental, built from public docs.\n- [NetRefer](./docs/networks/netrefer.md) — per-operator base URL + OAuth2 (Azure AD); iGaming ASR reporting; experimental, built from public docs.\n- [Affilae](./docs/networks/affilae.md) — Bearer token; single-brand; FR network; experimental, built from public docs.\n- [Optimise Media](./docs/networks/optimise-media.md) — apikey header (Service Account); UK/IN/APAC; experimental, built from public docs.\n- [AccessTrade](./docs/networks/accesstrade.md) — Token header + site ID; SE-Asia/Japan, per-country base URL; experimental, built from public docs.\n- [Travelpayouts](./docs/networks/travelpayouts.md) — X-Access-Token; global travel; experimental, built from public docs.\n- [Flipkart Affiliate](./docs/networks/flipkart.md) — affiliate ID + token headers; India; experimental, built from public docs.\n- [Adrecord](./docs/networks/adrecord.md) — APIKEY header; Nordic; experimental, built from public docs.\n- [Addrevenue](./docs/networks/addrevenue.md) — Bearer token + channel ID; Nordic; experimental, built from public docs.\n- [ShareASale](./docs/networks/shareasale.md) — affiliate ID + token + secret (signed); US; experimental, built from public docs.\n- [Pepperjam](./docs/networks/pepperjam.md) — apiKey query param; US (Ascend, distinct from Partnerize); experimental, built from public docs.\n- [AvantLink](./docs/networks/avantlink.md) — affiliate ID + auth key + website ID (query params); US/outdoor; experimental, built from public docs.\n- [Digistore24](./docs/networks/digistore24.md) — X-DS-API-KEY header; DE digital products; experimental, built from public docs.\n- [ClickBank](./docs/networks/clickbank.md) — DEV:CLERK key header + nickname; digital products; experimental, built from public docs.\n- [TUNE](./docs/networks/tune.md) — NetworkId + api_key (per-tenant host); HasOffers engine; experimental, built from public docs.\n- [Involve Asia](./docs/networks/involve-asia.md) — key + secret (token exchange); APAC; experimental, built from public docs.\n- [TradeTracker](./docs/networks/tradetracker.md) — customer ID + passphrase + site ID (SOAP session); NL/EU; experimental, built from public docs.\n- [Amazon Creators](./docs/networks/amazon-creators.md) — API key + partner tag; single programme per marketplace; experimental, built from public docs.\n- [Belboon](./docs/networks/belboon.md) — magic key + user ID (CSV export); DACH; experimental, built from public docs.\n- [financeAds](./docs/networks/financeads.md) — API key + publisher ID; DACH finance; experimental, built from public docs.\n- [Adcell](./docs/networks/adcell.md) — API key + affiliate ID; DACH; experimental, built from public docs.\n- [ShopMy](./docs/networks/shopmy.md) — Brand Partner token; US creator network; experimental, built from public docs.\n- [Levanta](./docs/networks/levanta.md) — Bearer token; Amazon creator platform; experimental, built from public docs.\n- [Howl](./docs/networks/howl.md) — NRTV-API-KEY header + publisher ID; creator link network; smart-link minting; experimental, built from public docs.\n- [Yieldkit](./docs/networks/yieldkit.md) — api_key + secret (query params); link monetisation; clicks supported; experimental, built from public docs.\n- [eHUB](./docs/networks/ehub.md) — apiKey query param + publisher ID; CZ/CEE; clicks supported; experimental, built from public docs.\n- [LinkConnector](./docs/networks/linkconnector.md) — API key (query param); US; experimental, built from public docs.\n- [Connexity](./docs/networks/connexity.md) — publisher ID + API key; US CPC-commerce (distinct from Skimlinks); experimental, built from public docs.\n- [Affiliate Future](./docs/networks/affiliate-future.md) — API key + password (query params); UK; 1-day pull window; experimental, built from public docs.\n- [Effiliation](./docs/networks/effiliation.md) — API key (query param); FR; experimental, built from public docs.\n- [2Performant](./docs/networks/2performant.md) — email + password (session login); Romania; experimental, built from public docs.\n- [Profitshare](./docs/networks/profitshare.md) — API user + key (HMAC-signed); Romania; experimental, built from public docs.\n\n**Brand / advertiser side:**\n\n- [Awin (advertiser)](./docs/networks/awin-advertiser.md) — OAuth bearer token; multi-brand via `GET /accounts`; gated to Accelerate / Advanced plans; read-only.\n- [CJ Affiliate (advertiser)](./docs/networks/cj-advertiser.md) — Personal Access Token (GraphQL); multi-brand via CID list; read-only.\n- [Everflow (advertiser)](./docs/networks/everflow-advertiser.md) — API key (admin-issued); multi-brand; experimental, built from public docs.\n- [Impact (advertiser)](./docs/networks/impact-advertiser.md) — Account SID + Auth Token; agency or brand-direct; read-only.\n- [Partnerize (advertiser)](./docs/networks/partnerize-advertiser.md) — application key + user API key; multi-brand; experimental, built from public docs.\n- [PartnerStack (advertiser)](./docs/networks/partnerstack-advertiser.md) — public + secret key pair (Vendor API); single-brand; experimental, built from public docs.\n- [Tradedoubler (advertiser)](./docs/networks/tradedoubler-advertiser.md) — reports token + organisation ID; multi-brand; experimental, built from public docs.\n- [Admitad (advertiser)](./docs/networks/admitad-advertiser.md) — OAuth2 client ID + secret + advertiser ID; multi-brand; read-only; experimental, built from public docs.\n- [Adtraction (advertiser)](./docs/networks/adtraction-advertiser.md) — API token; multi-brand; read-only (POST-read allowlist); experimental, built from public docs.\n- [Commission Factory (advertiser)](./docs/networks/commission-factory-advertiser.md) — API key; read-only; experimental, built from public docs.\n- [Daisycon (advertiser)](./docs/networks/daisycon-advertiser.md) — OAuth2 client ID + secret + refresh token; multi-brand; read-only; experimental, built from public docs.\n- [Kwanko (advertiser)](./docs/networks/kwanko-advertiser.md) — API token; multi-brand; read-only; experimental, built from public docs.\n- [ValueCommerce (advertiser)](./docs/networks/value-commerce-advertiser.md) — report-API key pair; multi-brand; read-only; experimental, built from public docs.\n- [Webgains (advertiser)](./docs/networks/webgains-advertiser.md) — API key + account ID; multi-brand; read-only; experimental, built from public docs.\n- [Rewardful](./docs/networks/rewardful.md) — API Secret (HTTP Basic); single-brand; Stripe-native SaaS; experimental, built from public docs.\n- [FirstPromoter](./docs/networks/firstpromoter.md) — API key + account ID (Bearer); single-brand; SaaS-referral; experimental, built from public docs.\n- [Partnero](./docs/networks/partnero.md) — API token (Bearer); single-brand; SaaS-referral; experimental, built from public docs.\n- [GrowSurf](./docs/networks/growsurf.md) — API key + campaign ID (Bearer); single-brand; referral-credit SaaS; experimental, built from public docs.\n- [LeadDyno](./docs/networks/leaddyno.md) — private key (query param); single-brand; SaaS-referral; experimental, built from public docs.\n- [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.\n- [Tolt](./docs/networks/tolt.md) — Bearer key; single-brand; SaaS-referral; experimental, built from public docs.\n- [Refersion](./docs/networks/refersion.md) — public + secret key headers; single-brand; Shopify-heavy SaaS; experimental, built from public docs.\n- [Tapfiliate](./docs/networks/tapfiliate.md) — X-Api-Key header; single-brand; SaaS-referral; experimental, built from public docs.\n\n## For the curious (or technical)\n\n`affiliate-mcp` has five practical layers. **Adapters** under `src/networks/`\nhandle each network's auth, API quirks, normalisation, and capability metadata.\n**MCP tools** expose typed operations such as `affiliate_awin_list_transactions`;\nsix meta-tools cover listing, diagnostics, brand resolution, and advisory client\nstrategy. **Skills and workflows** compose tools into affiliate jobs. **MCP\nprompts** are reusable templates and currently Awin-specific. **Setup paths**\nconnect the same local server to Claude Desktop, Claude Code, Codex, Cowork, or\nanother compatible local stdio MCP client.\n\nThe packaged skills under [`skills/`](./skills) are the conversation patterns\nClaude follows for common requests. Publisher side:\n[`affiliate-earnings-report`](./skills/affiliate-earnings-report/SKILL.md),\n[`affiliate-network-status`](./skills/affiliate-network-status/SKILL.md),\n[`affiliate-network-setup-help`](./skills/affiliate-network-setup-help/SKILL.md),\n[`audit-affiliate-links`](./skills/audit-affiliate-links/SKILL.md). Brand side:\n[`programme-performance-report`](./skills/programme-performance-report/SKILL.md),\n[`agency-portfolio-rollup`](./skills/agency-portfolio-rollup/SKILL.md),\n[`programme-anomaly-watch`](./skills/programme-anomaly-watch/SKILL.md).\n\nFor per-network capability detail, known upstream quirks, and the\neditorial baseline used when accepting new network claims, see\n[`REPORT.md`](./REPORT.md). It is regenerated from each adapter's\n`network.json` on every merge, so it stays in step with the code.\n\n## Repository layout\n\nIf you're poking around the source, the top-level folders are:\n\n- [`src/`](./src) — the MCP server. Entry point `index.ts`; one folder\n  per network under [`src/networks/`](./src/networks) (publisher\n  adapters at `<slug>/`, advertiser adapters at `<slug>-advertiser/`);\n  shared primitives under [`src/shared/`](./src/shared); bundled\n  Claude skills under [`skills/`](./skills).\n- [`docs/networks/`](./docs/networks) — per-network setup walkthroughs\n  (dashboard navigation, credentials, common failures), publisher and\n  advertiser side.\n- [`docs/README.md`](./docs/README.md) — documentation map, authority order,\n  and review rules.\n- [`templates/new-network/`](./templates/new-network) — scaffold to\n  copy when adding a new network adapter.\n- [`scripts/`](./scripts) — generators and validators\n  (`validate:network`, `generate:readme`, `generate:report`).\n- [`tests/`](./tests) — vitest suite. No live API calls; everything\n  runs against verbatim fixtures.\n- [`examples/`](./examples) — Claude Desktop config snippet.\n\n## Adding a network\n\n**If you work for an affiliate network**, the canonical path is in\n[`CONTRIBUTING.md`](./CONTRIBUTING.md) under \"Adopting your network\".\nYou can take ownership via `.github/CODEOWNERS`, verify the adapter with live\nevidence, and cover whichever sides your API exposes. Adoption does not\nautomatically grant `production`; promotion follows the same evidence,\nfreshness, and maintainer-review gates as every adapter.\n\nIf your favourite network isn't in the table and you don't work for\nit, you can add it anyway — and you don't necessarily need to be a\ndeveloper to do it. Open this repo in Claude Code and say *\"add\n[network name] to affiliate-mcp\"*. The `contribute` skill kicks in\nand walks the whole process: it asks early which side you're adding\n(publisher, brand-side, or both), picks the right scaffold and\ncredential-scope conventions, researches the network's API, writes\nthe tests, drafts the docs. You're the editor; Claude does the\ntyping.\n\nIf you'd rather drive it yourself, [`CONTRIBUTING.md`](./CONTRIBUTING.md)\nis the human-side workflow, [`AGENTS.md`](./AGENTS.md) is the primer\nfor AI coding agents, and [`templates/new-network/`](./templates/new-network/)\nis the scaffold to copy. Networks people most often ask for are\ntracked in GitHub Issues under the `good first issue` label.\n\nLocal development:\n\n```\nnpm install\nnpm test\nnpm run typecheck\nnpm run lint\nnpm run build\n```\n\n## Status\n\nBeta — available now. The repository contains 86 adapters across 72 network\nfamilies: 63 publisher-side and 23 advertiser-side. Support varies by adapter;\ncheck the generated network table and [`REPORT.md`](./REPORT.md) for each\nadapter's declared operations, claim status, and known limitations. Adapters\nremain `partial` or `experimental` until their behaviour is confirmed against\nreal publisher, agency, or in-house brand accounts.\n\n## Licence\n\nMIT. See [`LICENCE`](./LICENCE).\n\n## Acknowledgements\n\nThis project is only possible because the engineering teams at Awin,\nCJ Affiliate, eBay Partner Network, Impact, and Rakuten Advertising\npublish public, documented APIs — both the publisher endpoints and\n(for Awin, CJ, and Impact) the brand-side advertiser endpoints. These\nadapters read those APIs directly. Where a network has no usable API,\nan adapter may instead drive the user's own dashboard session (browser-driven).\n",
  "bytes": 44213,
  "sha": "a7e0613f797c4c41c7e2cd498699ec6e5d959af4b48ac404d6a996c5d6b7cbf6",
  "repo_slug": "bobberrisford/affiliatemcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_agenticaffiliate_affiliate_networks_m_1b9ea4f2/readme"
}