security

local holds nothing.
hosted holds your keys.

Brands and agencies run security reviews before they trust a tool. affiliate-mcp comes in two tiers with genuinely different answers, so this page gives you both. The local server runs on your own machine and never sends us your credentials or affiliate data. The optional hosted tier stores your network keys encrypted on our infrastructure, because that is the only way reports can run while your machine is off.

Wherever the answer differs, both are stated. Nothing below is written to make the hosted tier sound like the local one.

the short version

your data serves only you.

LOCAL · FREE & OPEN SOURCE
  • Runs as a process on your own machine, under your own account. No account to create with us.
  • Your network credentials and affiliate data are never sent to this project. Credentials go only to the official APIs of the networks you configure.
  • The security boundary that matters is your own machine and your own API keys, not a vendor's infrastructure.
  • No multi-tenant server, no shared database, no vendor-held copy of your data to be breached.
HOSTED · OPT-IN, PAID
  • You enter your network API keys into an encrypted dashboard so the service can run your reports without you. We do hold them.
  • Keys are encrypted at rest, decrypted only in memory at the moment a call runs, and used only to serve your own requests.
  • Your AI client never receives your network keys. It gets a short-lived, scoped OAuth session instead.
  • No self-serve export yet, and a signed-in session cannot be revoked before it expires. Both are stated in full below.

Choosing hosted is a deliberate act: you connect a network, and that key is then held by us. Everything the local server does, it does for free, forever, with no key ever leaving your machine.

how data flows — local

your machine ─────────── MCP client (Claude Desktop / Code / Codex) │ stdio ▼ affiliate-mcp (local process) │ HTTPS, per-network API calls ──▶ affiliate network APIs (your own accounts) │ │ optional, opt-in, aggregate ──▶ Cloudflare (telemetry only) ▼ ~/.affiliate-mcp/ (.env, brands.json, optional cache)

Prompts, tool arguments, and results stay between your MCP client and the local process. The networks see the same API calls they would see from your own dashboard usage.

how data flows — hosted

your browser our infrastructure (Cloudflare) ──────────── ─────────────────────────────── encrypted dashboard │ you paste a network API key ▼ credential vault ──────────────────▶ encrypted at rest, per-user key │ your MCP client │ decrypted in memory, at call time only │ OAuth 2.1, scoped session token ▼ ▼ affiliate-mcp (hosted process) mcp.agenticaffiliate.ai │ HTTPS ──▶ affiliate network APIs ▼ report returned to you

Your AI client is issued a short-lived OAuth session, never your network keys. Affiliate data is fetched live from the networks for the report that asked for it and is not retained afterwards. Reports can run on a schedule because the key is held here, which is the whole trade you are making.

vendor assessment, pre-answered

The questions a security review usually asks, answered for each tier. Where a row says Hosted:, that answer applies only if you have deliberately connected a network to the hosted service.

Hosting / deployment model
Local: runs as a process on the user's machine. No SaaS tenancy, no account with us.
Hosted: a multi-tenant service on Cloudflare, with a per-user account created on first sign-in.
Where customer data is stored
Local: on the user's machine only. Credentials in ~/.affiliate-mcp/.env (mode 0600); brand mappings in brands.json; optional result cache (off by default, owner-only permissions).
Hosted: in Cloudflare KV, across three separated namespaces — account records, the encrypted credential vault, and subscription state. Stored: your network API credentials and OAuth tokens, per-tenant brand and client-strategy context, and, for paying subscribers, one billing email address. Nothing else.
Does the vendor receive data or credentials?
Local: no. Credentials go only to the configured networks' official APIs. Affiliate data is fetched live and processed locally; it is not forwarded to this project.
Hosted: yes, by design. You enter your network keys into the encrypted dashboard so the service can run your reports while your machine is off. They are encrypted at rest and used only to serve your own requests. Your affiliate data itself is fetched live for each report and is not retained afterwards.
Sub-processors
Local: none for credentials or affiliate data. For optional opt-in telemetry only, Cloudflare routes and stores aggregate counts. Telemetry off means no sub-processors.
Hosted: Cloudflare (compute, storage, and the credential vault), Stripe (payments and billing), and Resend (sign-in and digest email). Your affiliate data is fetched from the networks' own APIs under your own agreements with them.
Data in transit / at rest
Local: all network calls are over HTTPS to the networks' own endpoints. At rest, local files use owner-only permissions; full-disk encryption is the operator's control.
Hosted: HTTPS throughout. Credentials at rest use envelope encryption — a per-user AES-256-GCM data key, itself wrapped by a master key. Be aware: in the current release that master key is held as a Cloudflare Worker secret rather than in an external KMS, so it is reachable by application code. This is a deliberate, documented MVP trade-off; the vault threat model states what it does and does not protect against.
Authentication and access control
Local: the user authenticates directly to each network with their own API credentials. There are no user accounts, roles, or sessions on our side.
Hosted: sign-in is a single-use email link that expires in 15 minutes; there is no password. AI clients connect over OAuth 2.1 with PKCE and receive a short-lived, scoped session token — never your network keys. A stored credential serves only its own owner's requests. There are no roles or team seats yet.
Data retention and deletion
Local: we retain none of the user's credentials or affiliate data. The user removes a network by deleting its keys, clears the cache with one command, and removes everything by uninstalling and deleting ~/.affiliate-mcp/.
Hosted: deleting your account deletes the encrypted credentials, the key protecting them, the account record, and the subscription record including the billing email. Deletion is complete, not a soft flag. Two current limits: self-serve export is not built yet, so a copy of your stored data has to be requested; and because session tokens are stateless, a token already issued stays valid until it expires rather than being revoked on the spot.
Telemetry / analytics
Local server: off by default, opt-in, aggregate-only. Never carries credentials, account identifiers, affiliate data, prompts, arguments, results, amounts, URLs, or error text.
Hosted: no product analytics. Operational logs record request outcomes and never contain credentials, email addresses, or affiliate figures. The signed-in dashboard and the OAuth consent pages deliberately load no external resources at all, analytics included.
This marketing site: Cloudflare Web Analytics. It sets no cookies, stores nothing on your device, and creates no visitor or session identifier — it counts page views and page-speed metrics. Your IP is used for country-level geolocation and is not stored. That is also why you were not asked to accept cookies: there is nothing on your device to consent to.
Compliance (SOC 2, ISO 27001, GDPR)
Local: there is no vendor-held data to certify, and we are not a processor of your affiliate data because it is never sent to us. The relevant controls sit with the operator and the networks under their existing agreements.
Hosted: we act as a processor of the credentials and account data you store with us. Stated plainly: there is no SOC 2 or ISO 27001 certification, none is in progress, and a data processing agreement is not currently offered. If your procurement requires any of those, the local server gives you the same capability with no vendor relationship at all.
Source review and vulnerability reporting
The full implementation is open source and auditable, hosted tier included. Vulnerabilities should be reported through the most private GitHub route available, without posting exploit details publicly.

about your questionnaire

This page, the privacy policy, the security policy, and the public source code are the source of truth and are kept current. For the local server, the standard vendor questionnaire mostly does not apply, because the project holds none of your credentials or affiliate data. For the hosted tier it applies in full, and the answers above are written to be read that way rather than to pass a review.

We default every brand and agency to this self-serve overview rather than completing bespoke per-customer questionnaires. For enterprise engagements with a specific contractual need, we will consider answering one on a case-by-case basis, using this overview as the basis for the answers.

what your side still owns

Local-first moves the controls that actually protect the data to the operator. A reviewer should confirm, on your side:

read the full security overview ▸ read the security policy ▸