# affset MCP server

> Allows media buyers to manage campaigns, zones, team members, and traffic stats directly through a chat interface.

- Repository: https://github.com/affset/mcp
- Page: https://hostedmcp.org/servers/affset/mcp
- Transport: stdio, remote
- Stars: 0
- License: MIT
- Latest version: 0.4.0

## Install

### Claude Code

```sh
claude mcp add --env 'AFFSET_API_KEY=<YOUR_AFFSET_API_KEY>' --env 'AFFSET_BASE_URL=<AFFSET_BASE_URL>' --env 'AFFSET_NAMESPACE=<AFFSET_NAMESPACE>' mcp -- npx -y @affset/mcp
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@affset/mcp"
      ],
      "env": {
        "AFFSET_API_KEY": "<YOUR_AFFSET_API_KEY>",
        "AFFSET_BASE_URL": "<AFFSET_BASE_URL>",
        "AFFSET_NAMESPACE": "<AFFSET_NAMESPACE>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@affset/mcp"
      ],
      "env": {
        "AFFSET_API_KEY": "<YOUR_AFFSET_API_KEY>",
        "AFFSET_BASE_URL": "<AFFSET_BASE_URL>",
        "AFFSET_NAMESPACE": "<AFFSET_NAMESPACE>"
      }
    }
  }
}
```

### VS Code CLI

```sh
code --add-mcp '{"name":"mcp","type":"stdio","command":"npx","args":["-y","@affset/mcp"],"env":{"AFFSET_API_KEY":"<YOUR_AFFSET_API_KEY>","AFFSET_BASE_URL":"<AFFSET_BASE_URL>","AFFSET_NAMESPACE":"<AFFSET_NAMESPACE>"}}'
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@affset/mcp"
      ],
      "env": {
        "AFFSET_API_KEY": "<YOUR_AFFSET_API_KEY>",
        "AFFSET_BASE_URL": "<AFFSET_BASE_URL>",
        "AFFSET_NAMESPACE": "<AFFSET_NAMESPACE>"
      }
    }
  }
}
```

### Codex

```sh
codex mcp add mcp --env 'AFFSET_API_KEY=<YOUR_AFFSET_API_KEY>' --env 'AFFSET_BASE_URL=<AFFSET_BASE_URL>' --env 'AFFSET_NAMESPACE=<AFFSET_NAMESPACE>' -- npx -y @affset/mcp
```

### Codex config.toml (`~/.codex/config.toml`)

```toml
[mcp_servers.mcp]
command = "npx"
args = ["-y", "@affset/mcp"]

[mcp_servers.mcp.env]
AFFSET_API_KEY = "<YOUR_AFFSET_API_KEY>"
AFFSET_BASE_URL = "<AFFSET_BASE_URL>"
AFFSET_NAMESPACE = "<AFFSET_NAMESPACE>"
```

### Gemini CLI

```sh
gemini mcp add -s user -e 'AFFSET_API_KEY=<YOUR_AFFSET_API_KEY>' -e 'AFFSET_BASE_URL=<AFFSET_BASE_URL>' -e 'AFFSET_NAMESPACE=<AFFSET_NAMESPACE>' mcp npx -- -y @affset/mcp
```

### Gemini settings.json (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@affset/mcp"
      ],
      "env": {
        "AFFSET_API_KEY": "<YOUR_AFFSET_API_KEY>",
        "AFFSET_BASE_URL": "<AFFSET_BASE_URL>",
        "AFFSET_NAMESPACE": "<AFFSET_NAMESPACE>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `AFFSET_API_KEY` | yes | yes | Tenant API key (Bearer token). Its namespace must match AFFSET_NAMESPACE. |
| `AFFSET_BASE_URL` | yes | no | Origin of your affset ad server API (no path, query, or embedded credentials). |
| `AFFSET_NAMESPACE` | yes | no | Tenant namespace this key belongs to (lowercase letters, numbers, hyphens; 3–63 chars). |
| `AFFSET_READ_ONLY` | no | no | Optional. Set to true to register only read-only tools (no create/update/delete/cut). |
| `AFFSET_REQUEST_TIMEOUT_MS` | no | no | Optional per-request HTTP timeout in milliseconds (1000–300000). |

## Tools (31)

- `whoami`
- `get_stats`
- `list_campaigns`
- `get_campaign`
- `list_zones`
- `list_team`
- `create_team_member`
- `create_campaign`
- `set_campaign_status`
- `update_campaign`
- `create_zone`
- `update_zone`
- `list_traffic_sources`
- `create_traffic_source`
- `update_traffic_source`
- `list_source_bids`
- `set_source_bid`
- `get_zone_url`
- `get_tracking_link`
- `cut_zones`
- `list_payout_rules`
- `set_payout_rule`
- `delete_payout_rule`
- `set_payout_goal`
- `list_targeting_types`
- `list_targeting_rules`
- `set_targeting_rule`
- `remove_targeting_rule`
- `list_sub_labels`
- `set_sub_labels`
- `list_conversions`

## FAQ

### Can I run this server locally?

Yes, you can run the npm package locally using a Bearer token and X-Namespace.

### What kind of statistics can I retrieve?

You can pull traffic stats including clicks, conversions, CR, payout, media cost, and ROI, grouped by dimensions like date, campaign, or country.
