미디어 바이어가 채팅 인터페이스를 통해 캠페인, 존, 팀원 및 트래픽 통계를 직접 관리할 수 있습니다.
다른 이름 affset/mcp, mcp, @affset/mcp
- 스타
- 0
- Tools
- 31
- 다운로드, 30일
- 258
- 최신 버전
- 0.4.0
- 마지막 커밋
- 2026년 9월 13일
- 라이선스
- MIT
affset MCP란?
affset은(는) MCP server입니다. 미디어 바이어가 채팅 인터페이스를 통해 캠페인, 존, 팀원 및 트래픽 통계를 직접 관리할 수 있습니다. 31개 도구를 제공합니다. 예: whoami, get_stats, list_campaigns.
프로젝트 README에서 생성된 요약
affset MCP server 정보
미디어 바이어는 이 MCP server를 사용하여 채팅 인터페이스를 통해 전체 광고 워크플로우를 관리할 수 있습니다. 이 서버는 사용자가 자연어를 사용하여 트래픽 통계를 가져오고, 캠페인을 관리하며, 팀 액세스 권한을 제어할 수 있게 함으로써 기존의 대시보드 탐색 방식을 대체합니다. 서버는 affset tenant API에 연결되어 국가, 광고주 또는 퍼블리셔와 같은 다양한 차원에 걸쳐 ROI, 전환 및 미디어 비용을 모니터링할 수 있는 방법을 제공합니다.
사용자는 OAuth를 통한 호스팅된 원격 연결 또는 Bearer token과 namespace를 사용하는 npm 패키지를 통한 로컬 설치 중 하나를 선택할 수 있습니다. 호스팅된 엔드포인트는 Claude, Cursor 및 Claude Code와 호환됩니다. 로컬 설정의 경우 서버는 stdio를 통해 실행되며 읽기 전용 액세스로 구성할 수 있습니다. 도구 세트에는 트래픽 소스 관리, ExoClick 또는 TrafficStars와 같은 플랫폼의 네트워크 입찰 조정, 실수로 인한 변경을 방지하기 위한 dry-run 보호 기능이 포함된 새로운 존 또는 팀원 생성 등을 위한 특정 명령이 포함되어 있습니다.
활용 사례
- 1캠페인 성과 분석특정 차원별로 그룹화된 클릭, 전환, ROI를 포함한 트래픽 통계 테이블을 요청합니다.
- 2네트워크 입찰 수정RichAds 또는 ExoClick과 같은 트래픽 소스에서 특정 캠페인의 USD 입찰가를 업데이트합니다.
- 3팀 액세스 관리새 팀원을 계정에 초대하고 특정 역할을 할당합니다.
- 4캠페인 설정 자동화특정 오퍼 URL, 지리적 타겟팅 및 지급률을 포함한 새 캠페인을 생성합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
affset MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Goose에 추가Claude Code에 affset MCP 설치
$ 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/mcpCursor에 affset MCP 설치
~/.cursor/mcp.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에 affset MCP 설치
.vscode/mcp.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에 affset MCP 설치
$ 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에 affset MCP 설치
claude_desktop_config.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에 affset MCP 설치
$ 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/mcpCodex config.toml에 affset MCP 설치
~/.codex/config.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에 affset MCP 설치
$ 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/mcpGemini settings.json에 affset MCP 설치
~/.gemini/settings.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>"
}
}
}
}affset MCP 도구 31
README에서 감지됨whoamiget_statslist_campaignsget_campaignlist_zoneslist_teamcreate_team_membercreate_campaignset_campaign_statusupdate_campaigncreate_zoneupdate_zone
| 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 | — |
도구 31개 모두 보기도구 수 줄이기
list_traffic_sourcescreate_traffic_sourceupdate_traffic_sourcelist_source_bidsset_source_bidget_zone_urlget_tracking_linkcut_zoneslist_payout_rulesset_payout_ruledelete_payout_ruleset_payout_goallist_targeting_typeslist_targeting_rulesset_targeting_ruleremove_targeting_rulelist_sub_labelsset_sub_labelslist_conversions
| 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 | — |
구성
AFFSET_API_KEY필수비밀Tenant API key (Bearer token). Its namespace must match AFFSET_NAMESPACE.
AFFSET_BASE_URL필수Origin of your affset ad server API (no path, query, or embedded credentials).
AFFSET_NAMESPACE필수Tenant namespace this key belongs to (lowercase letters, numbers, hyphens; 3–63 chars).
AFFSET_READ_ONLYOptional. Set to true to register only read-only tools (no create/update/delete/cut).
AFFSET_REQUEST_TIMEOUT_MSOptional per-request HTTP timeout in milliseconds (1000–300000).
| 이름 | 설명 | 유형 |
|---|---|---|
| AFFSET_API_KEY | Tenant API key (Bearer token). Its namespace must match AFFSET_NAMESPACE. | 필수비밀 |
| AFFSET_BASE_URL | Origin of your affset ad server API (no path, query, or embedded credentials). | 필수 |
| AFFSET_NAMESPACE | Tenant namespace this key belongs to (lowercase letters, numbers, hyphens; 3–63 chars). | 필수 |
| AFFSET_READ_ONLY | Optional. Set to true to register only read-only tools (no create/update/delete/cut). | |
| AFFSET_REQUEST_TIMEOUT_MS | Optional per-request HTTP timeout in milliseconds (1000–300000). |
자동 검사
2026년 11월 12일에 실행됨전체 보고서 →자동 검사를 통과했습니다. 이는 보안 감사가 아닙니다. 코드를 직접 읽고 서버에 필요한 최소한의 권한만 부여하십시오. 검사 방식
- 소스 저장소 연결 및 접근 가능통과
- 오픈 소스 라이선스 (OSI)통과
- 최근 1년 내 커밋 또는 릴리스통과
- 패키지 이름이 인기 패키지와 유사하지 않음통과
- 원격 엔드포인트가 HTTPS 사용통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 모델에 대한 숨겨진 지침 없음통과
- 패키지 및 해당 종속성에 중요한 보안 권고 없음통과
README
GitHub에서 보기affset MCP server
An MCP server that lets a media buyer run affset from a chat client — pull stats, manage campaigns/zones/team, payouts, targeting, sub labels, and cut underperforming zones in plain language, no dashboard.
The tools wrap the existing affset tenant API. Connect through the hosted
endpoint (OAuth, no API key) or run this package locally (Bearer token +
X-Namespace). One connection serves one tenant.
Fastest way to connect — the hosted endpoint. Add
https://mcp.affset.com/mcp as a remote MCP server in Claude (web or desktop),
Cursor, Claude Code, or any client that supports streamable HTTP with OAuth:
paste the URL, sign in with your affset email, keep Read-only (the consent
default) or grant full access. Every connection shows up on the dashboard
Integrations page and can be revoked individually. Setup guide:
affset.com/integrations.
The npm package below is the self-host path: same tool roster, runs on your
machine with an API key you manage yourself. Stdio defaults to full access
unless you set AFFSET_READ_ONLY=true.
Tools
| Tool | What it does |
|---|---|
whoami |
Show the tenant this server is bound to: namespace, API base, derived dashboard URL, and (when readable) company / timezone / custom API domain. Read-only. |
get_stats |
Traffic stats grouped by a dimension (date, campaign, zone, country, sub1–5, advertiser, publisher, …), optionally narrowed with advertiser_email/publisher_email filters (one user, any group_by). Returns clicks, conversions, CR, payout, media cost and ROI as a table. paid_only defaults to true (same as the dashboard) so CR excludes informative conversions. Sub columns use the tenant's sub labels when configured. Per-user groupings and filters are owner/manager plus the matching side's manager role. |
list_campaigns |
List campaigns (status / name filter, pagination). |
get_campaign |
One campaign's full record — every field (untruncated offer URL, exact schedule, budgets/pacing, silent flag, payout goal type) plus its targeting rules and payout rules, in one call. |
list_zones |
List traffic-source zones (status / name filter, pagination, linked source). |
list_team |
List team members (email, role, manager). Never returns API tokens. |
create_team_member |
Invite a team member (owner, manager, publisher, advertiser, publisher_manager, advertiser_manager). A scoped manager key can only create its own managed role, self-assigned. Returns the new API key once — list_team never shows it again. Dry-run by default; confirm: true to apply. |
create_campaign |
Create a campaign from an advertiser email, offer URL, geo, payout and name. Defaults: CPA / rate 0, paused, global payout rule, and a ready tracking link (linked source template when configured; otherwise source_click_id={clickid} + sub placeholders). Dry-run by default; confirm: true to apply. |
set_campaign_status |
Run or pause a campaign (action: "run" | "pause"). Dry-run by default; confirm: true to apply. Running can hit the plan's active-campaign limit. |
update_campaign |
Partial update (name, offer URL, status, rate, budgets, dates, …). Dry-run by default; confirm: true to apply. Prefer set_campaign_status for run/pause. |
create_zone |
Create a traffic-source zone (name + optional postback/site/traffic-back URLs, optional traffic_source_id link). Always created active. Dry-run by default; confirm: true to apply. |
update_zone |
Partial update (name, status, URLs, traffic_source_id). Dry-run by default; confirm: true to apply. Pass null to clear a URL or unlink the source. |
list_traffic_sources |
List traffic sources — the networks bought from, each with the tracking/postback templates its linked zones use. API token shown only as set/none. |
create_traffic_source |
Create a traffic source, optionally from a network preset (exoclick, trafficstars, propellerads, adsterra, richads) that copies verified templates into an editable row. Dry-run by default; confirm: true to apply. |
update_traffic_source |
Partial update (name, templates, api_token, status). Linked zones pick the new tracking template up immediately. Dry-run by default; confirm: true to apply. |
list_source_bids |
The network campaigns of one traffic source with their current bids, read live from the network account (ExoClick, TrafficStars, RichAds — needs the source's API token): status, pricing model, bid in USD, last change that entered Affset's mutation stage. Read-only. |
set_source_bid |
Set one network campaign's bid in USD using its existing pricing model (for RichAds: CPM for pops, CPC for push/display). The dry run returns expected_current_bid; pass that value back with confirm: true to bind the write to the bid reviewed, so a concurrent change is refused rather than overwritten. Records the attempt in the source's bid history and reports applied only when the network echoes the new value. Raising a bid above 5× needs allow_large_increase: true. Dry-run by default. |
get_zone_url |
The /serve URL to paste into a network's campaign settings — rotates across the zone's active campaigns. A zone linked to a traffic source renders that source's tracking template; otherwise prefilled sub convention + optional cost macro. Warns when no active campaigns are visible. |
get_tracking_link |
The /track/click link for an existing campaign + zone — straight to one active campaign, with no rotation or targeting checks. Renders a linked source's template like get_zone_url. Re-derives what create_campaign echoed on create. |
cut_zones |
Blacklist underperforming zones on a campaign by threshold (CR / spend / ROI). Dry-run by default; confirm: true to apply. |
list_payout_rules |
List a campaign's global + per-zone payout rules and its payout_goal_type. |
set_payout_rule |
Upsert a global or zone-specific payout. Dry-run by default; confirm: true to apply. |
delete_payout_rule |
Delete a global or zone-specific payout rule. Dry-run by default; confirm: true to apply. |
set_payout_goal |
Set or clear payout_goal_type (goal-based conversions). Dry-run by default; confirm: true to apply. |
list_targeting_types |
Catalog of targeting rule types, flagging the seeded ones /serve never evaluates. |
list_targeting_rules |
List a campaign's targeting rules, flagging any that have no effect. |
set_targeting_rule |
Upsert one targeting rule (safe merge), normalised to what /serve matches. Dry-run by default; confirm: true to apply. |
remove_targeting_rule |
Remove one targeting rule by id or type+method. Dry-run by default; confirm: true to apply. |
list_sub_labels |
List tenant display names for sub1–sub5. |
set_sub_labels |
Set or clear sub labels (partial; null clears). Dry-run by default; confirm: true to apply. |
list_conversions |
List conversion audit records (payout, spend, pixel type, payload, postback). paid_only filters server-side; other optional filters are client-side on the current page. |
Which URL do I give the network?
get_zone_url (/serve/{zone}) |
get_tracking_link (/track/click/{campaign}/{zone}) |
|
|---|---|---|
| Picks the campaign | affset, from the zone's rotation | you, one fixed campaign |
| Needs an active campaign | yes — otherwise traffic back / unsold | yes — otherwise 404 |
| Needs an active zone | yes | yes |
| Geo & targeting rules | enforced | not enforced |
cost= lands on |
the impression row | the click row |
Use one or the other for a given traffic stream — never both with cost=, or the
media cost is counted twice.
Both use the tenant's custom API domain when one is set, since the URL gets pasted
into the network verbatim. Macros ({clickid}, [CLICK_ID], ${SUBID}) are inserted
without percent-encoding — the source expands them before the request reaches affset.
cut_zones only ever adds zones to a campaign's blacklist, and does a
read-merge-write so existing targeting rules are never touched.
create_campaign needs a traffic-source zone for the tracking link: pass
zone_id, or let it auto-pick when the namespace has exactly one active zone.
Campaigns are created paused; activate them before sending traffic through either
URL. Both URL types also require an active zone. Geo whitelist is enforced in /serve
only — the direct tracking link is not geo-gated, but it still requires an active,
currently serviceable campaign.
Documentation resources
Beyond the tools, the server exposes the affset API reference as MCP
resources, so an
assistant can answer "how does conversion tracking work?" or "what does /serve
accept?" from the docs themselves — not just from the tool schemas.
| Resource URI | Type | Content |
|---|---|---|
affset://docs/api-reference |
text/markdown |
The full API reference — endpoints, auth, roles, examples. |
affset://docs/api-reference.json |
application/json |
The same reference as structured data, for programmatic use. |
They're the exact content published at affset.com/docs,
generated from one source, and fetched at read time from AFFSET_DOCS_URL
({origin}/api-reference.md and {origin}/api-reference.json) — so they always
reflect the currently published docs, not a copy pinned to this package. The
fetch sends no credentials (the docs are public and live on a different
origin than the tenant API). HTML SPA fallbacks, redirects, invalid JSON, and
oversized bodies are rejected. Both resources are always available, including
under AFFSET_READ_ONLY.
affset MCP 질문
affset MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 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를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
affset MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
affset MCP는 어떤 도구를 제공하나요?
31개 도구를 제공합니다. 예: whoami, get_stats, list_campaigns, get_campaign, list_zones.
이 서버를 로컬에서 실행할 수 있나요?
네, Bearer token과 X-Namespace를 사용하여 npm 패키지를 로컬에서 실행할 수 있습니다.
어떤 종류의 통계를 가져올 수 있나요?
날짜, 캠페인, 국가 등의 차원별로 그룹화된 클릭, 전환, CR, 지급액, 미디어 비용, ROI를 포함한 트래픽 통계를 가져올 수 있습니다.